用Directory.GetFiles要找出S588*.TIF的檔案,卻會找出不只有S588開頭的檔案?
到底是那裡的問題呢?
最近在論壇上有看到「C# Directory.GetFiles 問題」,Joe網友用Directory.GetFiles要找出S588*.TIF的檔案,卻會找出不只有S588開頭的檔案!
後來發現是因為8.3檔名在搞鬼,(MSDN的注意事項:由於這個方法會檢查具有 8.3 檔案名稱格式及長檔名格式的檔案名稱,所以類似於 "*1*.txt" 的搜尋模式可能會傳回未預期的檔案名稱。 例如,使用 "*1*.txt" 的搜尋模式會傳回 "longfilename.txt",因為對等的 8.3 檔案名稱格式為 "LONGFI~1.TXT"。)。
將8.3檔名停用就不會有這種問題發生了! 如何停用 8.3 名稱可參考以下的文章,
其實如果是IIS的話,也建議停用 8.3 名稱,記得在一個客戶那有被掃到說,IIS沒有將 8.3 名稱停用,可能會有資安的問題哦!
詳細可參考:Windows Short (8.3) Filenames – A Security Nightmare?
當然,如果無法停用的話,那只好在透過 Directory.GetFiles 取得資料後,再進行一次的Filter,如下,
var files = Directory.GetFiles("", "S588*.TIF").Where(item => item.StartWith("S588"));
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^