- ベストアンサー
ファイルダイアログのカレントフォルダ
- vb.netのOpenFileDialogでダイアログを開いたとき、最初はマイドキュメントが表示されますが違うフォルダからファイルを選ぶと、次にダイアログを開いたときはそのフォルダ(カレントフォルダ?)がまず表示されます。その情報はどこに保存されてるのですか?
- 同じパソコンでプログラムをコピーして交互に動かしてもカレントフォルダはその度に変わってるようです。別のパソコンにプログラムをコピーしたら(最初だけは)マイドキュメントからになるんですか?
- RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですがなぜでしょう?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Google先生によると、Q5748915で一回会ってるみたいね。 さて、本題。 当方Windows XP上で検証。 i) MS謹製の.NET Frameworkでは、 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU とかに書きこまれている模様。 #確認できる環境はなく確実ではないが、以下のサイトのものとキーが違うんだよなー。Vistaだからかなあ? http://www.winhelponline.com/articles/195/1/How-to-clear-the-file-names-MRU-in-Common-Dialog-boxes-in-Windows-Vista.html もし、ここであっているなら、そのアプリケーションを別マシンに持っていったらそのマシンのユーザー用のレジストリを参照するから、当然それぞれ別のディレクトリが参照される。 ii) >RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですがなぜでしょう? たしかに名前はそんな機能に見える。魔法の言葉「RTFM」を唱えてみよう。 ================== http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.aspx >Important 重要 >If the user of your application changes the folder in the FileDialog, then the current working directory for your application is set to the location specified in the FileDialog. To prevent this, set the RestoreDirectory property to true. あなたのアプリケーションのユーザが、(OpenFileDialog等の継承元の)FileDialogのフォルダを変更した場合、あなたのアプリケーションのカレントワーキングディレクトリが、FileDialogで指定した場所に変更される。これを防ぐためにはRestoreDirectoryをtrueに設定してください。 ============================================== …何でそんな設計なんだよ(怒) > MS で、このカレントワーキングディレクトリはOpenFileDialogが次回開く場所とは関係がない。それはおそらく、InitialDirectoryプロパティだろう。 空文字列が入っていた場合の挙動は知らない(汗)。MonoDevelop上では、EXEファイルのある位置になったし。以下のコードを試してみるといい。 using System; using System.Windows.Forms; class X{ public static void Main(){ OpenFileDialog ofd1 = new OpenFileDialog(); //ofd1.RestoreDirectory = true; System.Console.WriteLine(System.Environment.CurrentDirectory); ofd1.ShowDialog(); System.Console.WriteLine(System.Environment.CurrentDirectory); ofd1.ShowDialog(); System.Console.WriteLine(System.Environment.CurrentDirectory); } } ただ、Windows 7では設定してもディレクトリが変わらないだの Bug! This class produces different results depending on the OS(下部、Eiver氏のコメント) http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx FileDialog.AutoUpgradeEnabledがtrueだと、効果がなくなるだのという話もある。 http://social.msdn.microsoft.com/forums/en-US/winforms/thread/73acc356-b724-4362-b972-06eb29619af6/ NyaRuRu氏は.NET Frameworkのソースコードを読む手を提案している。 #一応、Monoは、読みながら書くなよ、と言っているので(ライセンスとか権利関係がややこしくなるし)一応俺はソースを読んでない。 #まぁ正直俺は鳥頭なので、読んでも、どうせすぐ忘れて同じコードなんかかけないと思っていますが。 文字数が足りないので、Monoの動きに関する解説は別のところに置いておく。 難度は高くないが、役に立たない割に長くて面倒くさい内容だ。練習にはなるけどね https://cid-b89cb784f5346675.office.live.com/self.aspx/TestCase/Q6738744/Q6738744.txt
お礼
またありがとうございます^o^ 残りの解説はさっきダウンロードしてきましたが このページの本文もこれから読んでいきます。 とりあえずは ・ユーザ毎のレジストリに保存されている ・同じユーザーであれば最後に開いた場所を覚えている ・違うマシン、違うユーザなら再びマイドキュメントから ということですね 軽い気持ちで質問したのですが プログラムのほうは思った以上に複雑みたいです。