はじめまして
きみと申します
CFileDlgなどで保存をしたりファイルを開いたりすると
ディレクトリがもとにあった場所から
変わってしまうと思うのですが
変えたくないときにはどうすればよいのでしょうか?
CFileDialog OpenFileDlg(TRUE, _T(sldprt), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, FilterStr, this);
上のように引数に
OFN_NOCHANGEDIRを加えればいいと思ったんですが
NT4でならうまくいくのですが
WIN2000ではうまくいきません。
また
::GetCurrentDirectory();と
::SetCurrentDirectory();を使う方法も試したのですが
カレントディレクトリが変わるだけで
実際のディレクトリはSetした位置に行ってくれません。。。
どなたかよろしくお願いします
SetCurrentDirectory()を使ってみたら思ったとおりにはなったけど
より確実な方法を書いておきます
OpenFileDlg.DoModal()より前に
OpenFileDlg.m_ofn.lpstrInitialDir = c:\\;
等のように初期フォルダを指定できます。
コメントありがとうございます。
OpenFileDlg.m_ofn.lpstrInitialDir の
やり方は知っているのですが
それでは少し都合が悪くて。。
SetCurrentDirectory()を使ったらうまくいったとの事ですが
どのように使ったのでしょうか??
TCHAR Path[_MAX_PATH];
::GetCurrentDirectory(_MAX_PATH, Path);
if(OpenFileDlg.DoModal() == IDOK)
{
//ここでカレントディレクトリが変わっていますよね?!
}
::SetCurrentDirectory(Path);
上のようなソースを作れば
カレントディレクトリーはもとの状態になると思うのですが
DLLを読み込んだアプリケーションのファイルを開くなどをすると
先ほど変えてしまったディレクトリに
移動してしまうと思うのですが
何か足らないものがあるのでしょうか??
よろしくお願いします
たまたまc:\\と指定したらうまくいったように見えただけでした。
失礼しました。
OpenFileDlg.m_ofn.lpstrInitialDirを使えるなら、そのまま使うのがいいでしょう。
Windows2000についてですが
MSDNみたらlpstrInitialDirについての仕様がOSにより違うみたいです
試した感じでは、アプリごとにOS側でGetOpenFileNameやGetSaveFileNameで
選んだファイルのフォルダを覚えていて、そこを初期フォルダにしてる感じですね
OpenFileDlg.DoModal()の後もカレントディレクトリは変更されていないようです
lpstrInitialDirにNULLを指定すると、OS側が覚えているディレクトリが初期値になる
そんな感じではないかと思います。
おはようございます
いろいろありがとうございます!
やはりだめみたいなので
lpstrInitialDirを使って対処できるところは
それを使おうと思います!
ありがとうございます