問題是相同的設定檔和檔案,為何在我電腦不會有錯,在客戶端會發生錯誤,
剛好同事也提到,同樣的檔案放到他家裡電腦也發生同樣的錯誤,但在公司電腦不會,
這下子激起我的好奇心想一探究竟。
請同事把發生問題的檔案給我,讓我試試,
因為 Skype 傳來的檔案,我預設放 C:\
結果開啟真的出錯,我再把檔案放到開發專案磁碟槽準備 Debug 結果正常沒錯誤!見鬼了....
將專案 Copy 一份到 C:\ 同時開啟後進入 Debug Mode 看怎麼回事,
看來真的採到 Microsoft 的雷了!
首先在 C:\ 和另一個磁碟槽建立測試用檔案
我把檔案放在 C:\ 和 E:\
然後將程式中斷,在 [即時運算視窗] 中,把資料印出來,
可以發現檔案數量不同,(F3.xml.123 是屬於副檔名 123 不是 XML 所以不會被列出來)
? System.IO.Directory.GetFiles("C:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly) {Length=5} (0): "C:\DEMO_TEST\F1.xml" (1): "C:\DEMO_TEST\F2.xml" (2): "C:\DEMO_TEST\F3.xml" (3): "C:\DEMO_TEST\F3.xml_123" (4): "C:\DEMO_TEST\F3.xml123" ? System.IO.Directory.GetFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly) {Length=3} (0): "E:\DEMO_TEST\F1.xml" (1): "E:\DEMO_TEST\F2.xml" (2): "E:\DEMO_TEST\F3.xml"
我同時用 System.IO.Directory.GetFiles 還有 System.IO.Directory.EnumerateFiles 兩個寫法測試,結果一樣,
'使用 GetFiles 方式 For Each strFileName As String In System.IO.Directory.GetFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly) Debug.Print(strFileName) Next '使用 EnumerateFiles 方式 Dim fn As Object = System.IO.Directory.EnumerateFiles("E:\DEMO_TEST", "*.XML", SearchOption.TopDirectoryOnly) For Each strFileName As String In fn Debug.Print(strFileName) Next
查了一下官網的 System.IO.Directory.GetFiles 和 System.IO.Directory.EnumerateFiles 說明,
原來兩個 SearchPattern 作用相同,難怪結果一樣,
當 SearchPattern 設定的 Extension(副檔名) 剛好為三個字元時,
會同時將副檔名符合的三個字元以外的其它檔案也一並找出來,
造成 .XMLxxx 的副檔名都一起被列出來了,
所以官網上的說明符合 C:\ 搜尋的結果,但和我電腦上其它磁碟槽的結果不符!
這個問題還真是擾人呀,
趕快把這個問題記錄下來,不然下次忘記又要踩雷了!!
沒有留言:
張貼留言