なぜWindows XPでファイルを開くダイアログを使用して、現在の作業ディレクトリの変更?
-
26-09-2019 - |
質問
私は奇妙な行動を発見しました。
あなたはWindows XP
でこのコードを実行する場合、使用Windows 7
でこのコードは、選択したファイルのパスに現在の作業ディレクトリの変更は、しかし、現在の作業ディレクトリが変更されない場合ます。
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Current Directory {0}",Directory.GetCurrentDirectory()), "My Application",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog and get result.
if (result == DialogResult.OK)
{
}
MessageBox.Show(string.Format("Current Directory {0}", Directory.GetCurrentDirectory()), "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
誰もが、この行動の理由を知っていますか?なぜXPではなくWindows 7
でカレントディレクトリの変更?
解決
あなたの説明に基づいて、それは<のhref = "http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory(v=VSのデフォルト値のように聞こえます。 100)の.aspx」REL = "noreferrerは"> RestoreDirectory のプロパティは、XPとWindows7の間で異なっています。私は、なぜこのような場合だろうかわからないが、あなたは明示的にコード内で値を設定することで、この問題を解決することができます。これをtrueに設定すると、ダイアログの近くにディレクトリを復元します。
他のヒント
のFileDialog(OpenFileDialogの基底クラス)、彼らが利用可能な場合、ダイアログがVistaでimplmentedた新しいファイルダイアログの利点および新しいオペレーティングシステムを取るかどうかを制御AutoUpgradeEnabledというプロパティがあります。 (内部的には、これはcomdlg32またはIFileDialogインターフェイスを使用してGetOpenFileName関数を呼び出すとの差である)。
このようにする理由は、新しいダイアログは、「場所」バー(CustomPlacesコレクションを参照)のような多数の機能をサポートしていることです。この予想外の副作用は、古いバージョンがしたのに対し、新しいIFileDialog実装は、現在のディレクトリを変更しないということです。
これはファイルダイアログの実装のバグであるとRestoreDirectoryプロパティ
の値に関係なく起こりますあなたは新しいファイルダイアログの機能を使用したくない場合は、一番簡単な方法は、falseにAutoUpgradeEnabledを設定することです。