簡體   English   中英

Directory.GetFiles 使用 SearchPattern 返回意外結果

[英]Directory.GetFiles returns unexpected results with SearchPattern

我正在處理一個處理大量文件(超過 50 000 個文件)的批處理程序,我正面臨Directory.GetFiles方法的奇怪行為。

在此過程中,我移動與以下搜索模式“*.pdf”匹配的文件,並通過Directory.GetFiles方法獲取文件:我很驚訝地看到有時我移動了 .pdfa 文件。

所以我檢查了文檔,它清楚地指出,如果搜索模式包含一個帶有 3 個字母的擴展名,每個擴展名以該擴展名開頭的文件都將被返回。

我已經用一個簡單的程序進行了測試,它的行為不像文檔中所說的那樣,它只在極少數情況下表現得像這樣。

使用此代碼:

static void Main(string[] args) {
    var directory = @"E:\Test\";
    var files = Directory.GetFiles(directory, "*.pdf");
    foreach(var file in files)
        Console.WriteLine(file);
}

我有這個結果:

在此處輸入圖片說明

你對這種行為有什么解釋嗎?

這是 GetFiles 方法的預期行為,在 Windows 上也是如此,如果您使用.pdf在目錄中搜索,它將選擇帶有擴展名的文件 .pdfa*.pdfaaa ,您需要自己放置一個Where()例如:

Directory.GetFiles(directory, "*.pdf").Where(item => item.EndsWith(".pdf"));

正如您所看到的,當我們在 Windows 中搜索時,它給出的結果與您的代碼給出的結果相同:

在此處輸入圖片說明

出於GetFiles行為方式的原因, 請查看此處,您可能還想查看這篇文章

正如@luaan 和@hans-passant 所解釋的(非常感謝!)我沒有找到擴展名為 .pdfa 的文件,因為我的硬盤驅動器上禁用了 8.3 格式。

在啟用了 8.3 格式的硬盤驅動器上,該方法的行為與文檔中所述相同。

GetFiles 具有不同的行為,無論是否啟用設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM