ディレクトリを変えたくないのですが。。

[戻る]
きみ 2001/05/30(水) 18:45:42
はじめまして
きみと申します
CFileDlgなどで保存をしたりファイルを開いたりすると
ディレクトリがもとにあった場所から
変わってしまうと思うのですが
変えたくないときにはどうすればよいのでしょうか?

CFileDialog OpenFileDlg(TRUE, _T("sldprt"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, FilterStr, this);

上のように引数に
OFN_NOCHANGEDIRを加えればいいと思ったんですが
NT4でならうまくいくのですが
WIN2000ではうまくいきません。

また
::GetCurrentDirectory();と
::SetCurrentDirectory();を使う方法も試したのですが
カレントディレクトリが変わるだけで
実際のディレクトリはSetした位置に行ってくれません。。。

どなたかよろしくお願いします

ku 2001/05/30(水) 19:12:11
SetCurrentDirectory()を使ってみたら思ったとおりにはなったけど
より確実な方法を書いておきます

OpenFileDlg.DoModal()より前に
OpenFileDlg.m_ofn.lpstrInitialDir = "c:\\";
等のように初期フォルダを指定できます。

きみ 2001/05/30(水) 19:26:10
コメントありがとうございます。
OpenFileDlg.m_ofn.lpstrInitialDir の
やり方は知っているのですが
それでは少し都合が悪くて。。

SetCurrentDirectory()を使ったらうまくいったとの事ですが
どのように使ったのでしょうか??


TCHAR Path[_MAX_PATH];
::GetCurrentDirectory(_MAX_PATH, Path);

if(OpenFileDlg.DoModal() == IDOK)
{
  //ここでカレントディレクトリが変わっていますよね?!
}

::SetCurrentDirectory(Path);

上のようなソースを作れば
カレントディレクトリーはもとの状態になると思うのですが
DLLを読み込んだアプリケーションのファイルを開くなどをすると
先ほど変えてしまったディレクトリに
移動してしまうと思うのですが
何か足らないものがあるのでしょうか??

よろしくお願いします

ku 2001/05/30(水) 21:40:07
たまたま"c:\\"と指定したらうまくいったように見えただけでした。
失礼しました。
OpenFileDlg.m_ofn.lpstrInitialDirを使えるなら、そのまま使うのがいいでしょう。

Windows2000についてですが
MSDNみたらlpstrInitialDirについての仕様がOSにより違うみたいです
試した感じでは、アプリごとにOS側でGetOpenFileNameやGetSaveFileNameで
選んだファイルのフォルダを覚えていて、そこを初期フォルダにしてる感じですね
OpenFileDlg.DoModal()の後もカレントディレクトリは変更されていないようです
lpstrInitialDirにNULLを指定すると、OS側が覚えているディレクトリが初期値になる
そんな感じではないかと思います。

きみ 2001/05/31(木) 09:00:58
おはようございます
いろいろありがとうございます!
やはりだめみたいなので
lpstrInitialDirを使って対処できるところは
それを使おうと思います!
ありがとうございます

古いスレッドには追加発言できません。