VB.NET 相対パスに注意!OpenFileDialog/SaveFileDialogでカレントディレクトリが変更
あるシステムでの出来事。
ファイルを出力する処理で、
出力するフォルダを設定ファイル(INIやXML)に保持しており、
そのフォルダへファイルを出力するプログラムがあったのだが、
エラーで落ちることがあった。
再現できず原因がなかなか特定できなかったのだが、
カレントディレクトリが変更されているのが原因と判明。
出力するフォルダパスを相対パスで持っており、
別画面でOpenFileDialogを使用することでカレントディレクトリが変更されエラーとなっていた。
OpenFileDialog/SaveFileDialogでカレントディレクトリが変更されることについて調べてみたら、
結構有名な問題らしい。
原因がなかなか特定できなかったのは実行環境が違ったからなのだが、
WindowsXPではカレントディレクトリが変更されるのに、
WIndows7ではカレントディレクトリが変更されない・・・
とりあえず調べられる環境で変更されるかどうかを確認してみた。
Windows XP : 変更される
WIndows Vista : 変更されない
WIndows 7 : 変更されない
Windows Server 2003 : 変更される
Windows Server 2008 : 変更されない
frameworkのバージョンは原因でない模様。
なんでOSによって違うかは・・・・誰か教えてください。
とりあえず対応方法はいくつかあるので紹介しておきます。
1.変更前のカレントディレクトリを取得して再設定する方法
Dim currentDirectory As String
currentDirectory = System.IO.Directory.GetCurrentDirectory()
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
End If
System.IO.Directory.SetCurrentDirectory(currentDirectory)
2.OpenFileDialog/SaveFileDialogのRestoreDirectoryプロパティをTrueにする方法
OpenFileDialog1.RestoreDirectory = True
コメントはまだありません。