vb.netのOpenFileDialogでダイアログを開いたとき、最初はマイドキュメントが表示されますが
違うフォルダからファイルを選ぶと、次にダイアログを開いたときはそのフォルダ(カレントフォルダ?)がまず表示されます。
その情報はどこに保存されてるのですか?
同じパソコンでプログラムをコピーして交互に動かしてもカレントフォルダはその度に変わってるようです。
別のパソコンにプログラムをコピーしたら(最初だけは)マイドキュメントからになるんですか?
もう1つ質問で
RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですが
なぜでしょう?
試しに作ったコードは↓です。
環境はvb2005、XP-sp3です。
--------------------
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
Dim OpenFileDialog1 As New OpenFileDialog()
' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False)
OpenFileDialog1.RestoreDirectory = False
' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
MessageBox.Show(OpenFileDialog1.FileName)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
Dim OpenFileDialog2 As New OpenFileDialog()
' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False)
OpenFileDialog2.RestoreDirectory = True
' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
If OpenFileDialog2.ShowDialog() = DialogResult.OK Then
MessageBox.Show(OpenFileDialog2.FileName)
End If
End Sub
End Class
--------------------
No.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- …
もし、ここであっているなら、そのアプリケーションを別マシンに持っていったらそのマシンのユーザー用のレジストリを参照するから、当然それぞれ別のディレクトリが参照される。
ii)
>RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですがなぜでしょう?
たしかに名前はそんな機能に見える。魔法の言葉「RTFM」を唱えてみよう。
==================
http://msdn.microsoft.com/en-us/library/system.w …
>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.w …
FileDialog.AutoUpgradeEnabledがtrueだと、効果がなくなるだのという話もある。
http://social.msdn.microsoft.com/forums/en-US/wi …
NyaRuRu氏は.NET Frameworkのソースコードを読む手を提案している。
#一応、Monoは、読みながら書くなよ、と言っているので(ライセンスとか権利関係がややこしくなるし)一応俺はソースを読んでない。
#まぁ正直俺は鳥頭なので、読んでも、どうせすぐ忘れて同じコードなんかかけないと思っていますが。
文字数が足りないので、Monoの動きに関する解説は別のところに置いておく。
難度は高くないが、役に立たない割に長くて面倒くさい内容だ。練習にはなるけどね
https://cid-b89cb784f5346675.office.live.com/sel …
またありがとうございます^o^
残りの解説はさっきダウンロードしてきましたが
このページの本文もこれから読んでいきます。
とりあえずは
・ユーザ毎のレジストリに保存されている
・同じユーザーであれば最後に開いた場所を覚えている
・違うマシン、違うユーザなら再びマイドキュメントから
ということですね
軽い気持ちで質問したのですが
プログラムのほうは思った以上に複雑みたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
OpenFileDialogを使った後にもう一度開くと以前のファイルを表示させたい。
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
5
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
6
Visual Basic.NETの、Form 間での引数の引渡し方法を教えてください。
Visual Basic(VBA)
-
7
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
8
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
9
Listviewに表示された文字のコピーペースト
Visual Basic(VBA)
-
10
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
11
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
12
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フルパスから最後のディレクト...
-
マイクラでPythonのプログラミ...
-
どんなプログラムを書いても指...
-
windows.hがincludeされない
-
ShellExecute、エクスプローラ...
-
webアプリケーションでの画像フ...
-
ファイルやディレクトリの存在...
-
FindFirstFileについて
-
C言語を用いたファイルの一括削...
-
ThisWorkbook.Pathについて
-
Paiza Cloudです。学籍番号と氏...
-
Paiza Cloudです。 どうやれば...
-
ページ読み込み時に自動的にsub...
-
C言語初心者の質問失礼します。
-
ドラッグアンドドロップでファ...
-
xismoについてです!開こうとす...
-
iniファイルに追記がしたいです。
-
ASP .NETでファイル選択ダイア...
-
EXCEL VBAでテキストファイルの...
-
WAVファイル同士の結合が可...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
マイクラでPythonのプログラミ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
ExcelVBA サーバーの(共有フォ...
-
エクセルVBAで相対パスでファイ...
-
pythonでの日本語操作
-
VBAで自身のファイル名を取得す...
-
webアプリケーションでの画像フ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
ファイルダイアログのカレント...
おすすめ情報