1. 用OpenFileDialog讓使用者選取parsing的binary檔案
2. 程式讀取一個parsing過程會用到的參數設定檔(放在和執行檔同一個目錄下)
3. parsing binary並且把結果寫到一個新的檔案
看起來很正常的流程,在第二步讀取設定檔時卻會一直回傳找不到檔案的錯誤訊息。而且很奇怪的是這段程式在Win7上可以執行,在XP上卻不能執行。找了很久才發現在XP上執行OpenFileDialog會更改working directory,造成我用相對路徑開檔時會找不到設定檔。而Win7的working directory在執行OpenFileDialog並不會被更改。
以下是一個簡單的範例程式可以看出working directory在執行OpenFileDialog後會被改掉:
var dlg = new Microsoft.Win32.OpenFileDialog(); workingDirectory = Directory.GetCurrentDirectory(); // Correct if (open.ShowDialog() == DialogResult.OK) { workingDirectory = Directory.GetCurrentDirectory(); // Wrong!! }上面例子執行後會發現workingDirectory最後會被設定成OpenFileDialog選取檔案的那個資料夾。
還好網路上蠻多人碰到這個問題,解決方法很簡單,只要把RestoreDirectory設成true就可以了,這個Property在WPF以及Windows Form的FileDialog中都有實做:
var dlg = new Microsoft.Win32.OpenFileDialog(); dlg.RestoreDirectory = true; workingDirectory = Directory.GetCurrentDirectory(); if (open.ShowDialog() == DialogResult.OK) { workingDirectory = Directory.GetCurrentDirectory(); }執行後可以發現執行完OpenFileDialog後working directory不會被改掉了。至於為什麽Win7的working directory不會被改掉,
沒有留言:
張貼留言