Path.GetFullPath遇到Shortcut的陷阱

Path.GetFullPath遇到Shortcut的陷阱

前言

今天到客戶查看程式的問題,發生「找不到檔案」的錯誤,再看一下程式碼發現是死在Shell(openFile, AppWinStyle.NormalFocus)! 再看一下openFile是如何組出來的呢?

 

研究

直覺認為可能是Path中間有空白,會導致Shell錯誤,把Path以”包起來,如下

 

再Run還是錯! 嗯~ 那會不會是取檔案路徑的問題呢? 看一下getFileDirectory這個函式,裡面是使用Path.GetFullPath("MyAp.exe"),感覺沒有錯呀! 用程式直接Run Path是對的呀! 只好寫Log出來看! 結果,客戶寫出來的Log是

C:\Documents and Settings\..\桌面\MyAp2.exe。呀~~ 桌面上當然沒有MyAp2.exe呀! 奇怪! 會不會是Shortcut的問題呢? 看一下,它的開始位罝是空白的呀!

image

再把開始位罝補上去,再去Run就是對的路徑了!

image

後來就跟User說,補上那個開始位罝就好了! 看一下Path.GetPath的說明,「This method uses current directory and current volume information to fully qualify path. If you specify a file name only in path, GetFullPath returns the fully qualified path of the current directory.」所以,也就是目前在那個位置就給你那個位置! 奇怪,前人程式為何要用這個呢! 不過,誰知道,那個人這麼利害,連建個Shortcut,裡面的開始位置居然是空的! 我在檔案總管裡去設定「傳送到桌面當捷徑」,開始位置是有值的呀! 真是奇!

結論

如果要知道目前這個執行程式的Path,用Application.ExecutablePath是比較沒有問題的! 所以程式我就改用它!

改用以下的Code,比較穩!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^