none
C# Directory.GetFiles 問題 RRS feed

  • 問題

  • 請教我有一個程式是要刪除影像,每一批的影像檔名前4碼都不同,

    以該筆為例我是以S588*.TIF要將S588開頭的影像都刪除,但卻發現被刪除的不只有S588開頭的還有別的,以下是我的程式碼.

    環境為XP + VS2008 + .NET3.5 SP1

    string[] tifs = Directory.GetFiles("", "S588*.TIF");

    foreach(string dir in tifs)

    {

       clsShareData.WriteLogMsg("DeleteTIF=" + dir);

       File.Delete(dir);

    }

    以下是我程式記錄下來的log,以S588*.TIF  GetFiles出來的檔案居然出現最後一筆S589開頭的,導致程式刪錯影像


    2013/9/27 下午 03:50:47 [Information] DeleteTIF=S588*.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880001A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880001B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880002A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880002B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880003A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880003B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880004A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880004B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880005A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880005B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880006A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880006B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880007A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880007B.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880008A.TIF
    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5880008B.TIF

    2013/9/27 下午 03:50:47 [Information] DeleteTIF=\\WNSP3R7CIUG01\batch\S5890004A.TIF

    2013年9月30日 上午 07:03

解答

  • 您好,

    如果使用「"S588?????.TIF"」也會有同樣的情況嗎?

    不知8.3檔案名稱會不會有影響?

    或是再加個filter,

    var files = Directory.GetFiles("", "S588*.TIF").Where(item => item.StartWith("S588"));


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2013年10月1日 上午 12:55
    • 已提議為解答 ThankfulHeart 2013年10月1日 上午 04:38
    • 已標示為解答 Joe chiu 2013年10月1日 上午 09:02
    2013年10月1日 上午 12:41

所有回覆

  • Joe chiu:

    我無法模擬你的情況,我一切正常:

     foreach (var item in Directory.GetFiles("d:\\","S588*.txt",SearchOption.TopDirectoryOnly))
                {
                    Console.WriteLine(item);
                }

    你看,我就一個文件,沒有顯示出來。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.


    2013年9月30日 下午 12:35
  • 會不會是一開始就少打一個 8...

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年9月30日 下午 12:49
    版主
  • 我的程式也不是每一次都會這樣,一天刪個20-30個批影像才會出現一次這樣的狀況...

    2013年9月30日 下午 03:28
  • 當初一開始也是認為說是不是傳入的值有問題,所以才又特別加上Log顯示第一行所顯示的值是否正確..

    另找到一位有跟我相同情況的,他以ota* 卻找出otb*的檔案...

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/35361367-2264-4bec-8517-6a85f6142102/directorygetfiles-prefix-bug


    2013年9月30日 下午 03:36
  • 您好,

    如果使用「"S588?????.TIF"」也會有同樣的情況嗎?

    不知8.3檔案名稱會不會有影響?

    或是再加個filter,

    var files = Directory.GetFiles("", "S588*.TIF").Where(item => item.StartWith("S588"));


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2013年10月1日 上午 12:55
    • 已提議為解答 ThankfulHeart 2013年10月1日 上午 04:38
    • 已標示為解答 Joe chiu 2013年10月1日 上午 09:02
    2013年10月1日 上午 12:41
  • Joe chiu,

    我認為你應該把這個問題反映給Microsoft,請點此此處用英文反饋。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    2013年10月1日 上午 01:12
  • 我先改用"S588?????.TIF"方式觀察看看.
    2013年10月1日 上午 01:43
  • 好的,謝謝
    2013年10月1日 上午 01:47
  • 可以貼一下
    如果在 dos command 
    使用 dir S588*.TIF /x  會得到哪些檔案?


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2013年10月1日 上午 01:58
  • Directory.GetFiles() 的核心呼叫的是 FindFirstFile() 和 FindNextFile() API,如果說連系統指令 (dir) 都有錯表示這兩個 API 裡面有 bug...


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年10月1日 上午 02:11
    版主
  • 用dir測試找出了兩批有抓錯的情況,其中一批結果如下,dir S709*.TIF出現S799的檔案...重點是出現的S799開頭的檔案不是全部,只是一小部分,很詭異

    dir 加上/x 的結果,看來好像是8.3的問題...


    • 已編輯 Joe chiu 2013年10月1日 上午 03:34
    2013年10月1日 上午 03:29
  • 建议你及时反馈一下。

    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    2013年10月1日 上午 03:43
  • 看來是該目錄下檔案太多造成 短檔名格式 受到影響 , 進而影響到GetFiles 的結果

    如果可以 最有效的方式 就是修改目錄結構(..\S709\S709*.TIF) 或檔名(直接是8.3檔案格式)
    如若不行 就採用 亂馬客之前提的:針對取出的檔名 再做一次檢查


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2013年10月1日 上午 03:52
  • 該程式各放在4台Client上各自有對應4台server上的影像做刪除,只有其中一台有這樣的狀況發生,

    我會先以亂馬客建議的方式取出的檔名再做一次檢查,再來看這台server跟其他server有啥設定不同,

    謝謝各位的協助.


    2013年10月1日 上午 05:55
  • 經測試disable 8.3設定後目前都正常,Thanks
    2013年10月1日 上午 09:02