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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
OpenFileDialogを使った後にもう一度開くと以前のファイルを表示させたい。
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VBでグローバル変数を宣言するには
Visual Basic(VBA)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
5
Visual Basic.NETの、Form 間での引数の引渡し方法を教えてください。
Visual Basic(VBA)
-
6
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
7
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
8
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
9
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
10
Listviewに表示された文字のコピーペースト
Visual Basic(VBA)
-
11
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
12
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
マイクラでPythonのプログラミ...
-
フルパスから最後のディレクト...
-
windows.hがincludeされない
-
ファイルやディレクトリの存在...
-
fopenで別ディレクトリにファイ...
-
バックスラッシュって?
-
ドラッグ&ドロップについてです...
-
FTPでputすると空ファイルが出...
-
webアプリケーションでの画像フ...
-
C言語初心者の質問失礼します。
-
C言語での縦方向のファイル出力...
-
パラメータが正しくありません...
-
c言語 2つのファイルを行ご...
-
CSVファイルへの保存の際、デー...
-
xismoについてです!開こうとす...
-
1行ずつではなくまとめてファイ...
-
ファイル名の先頭にアンダース...
-
出力をExcelにすることは可能??
-
VBSで指定行に挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
どんなプログラムを書いても指...
-
ExcelVBAでカレントディレクト...
-
マイクラでPythonのプログラミ...
-
windows.hがincludeされない
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ExcelVBA サーバーの(共有フォ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
webアプリケーションでの画像フ...
-
ファイルダイアログのカレント...
-
VBAで自身のファイル名を取得す...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報