ディレクトリを変えたくないのですが。。 – プログラミング – Home

ディレクトリを変えたくないのですが。。
 
通知
すべてクリア

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


きみ
 きみ
(@きみ)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

はじめまして
きみと申します
CFileDlgなどで保存をしたりファイルを開いたりすると
ディレクトリがもとにあった場所から
変わってしまうと思うのですが
変えたくないときにはどうすればよいのでしょうか?

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

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

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

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


引用解決済
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

SetCurrentDirectory()を使ってみたら思ったとおりにはなったけど
より確実な方法を書いておきます

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


返信引用
きみ
 きみ
(@きみ)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

コメントありがとうございます。
OpenFileDlg.m_ofn.lpstrInitialDir の
やり方は知っているのですが
それでは少し都合が悪くて。。

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

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

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

::SetCurrentDirectory(Path);

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

よろしくお願いします


返信引用
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

たまたまc:\\と指定したらうまくいったように見えただけでした。
失礼しました。
OpenFileDlg.m_ofn.lpstrInitialDirを使えるなら、そのまま使うのがいいでしょう。

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


返信引用
きみ
 きみ
(@きみ)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

おはようございます
いろいろありがとうございます!
やはりだめみたいなので
lpstrInitialDirを使って対処できるところは
それを使おうと思います!
ありがとうございます


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました