FCL應用技巧之——DirectoryInfo.GetFiles()搜尋模式存在的問題

來源:互聯網
上載者:User
1 MSDN上關於DirectoryInfo.GetFiles()搜尋模式的說明

先看關於DirectoryInfo.GetFiles()的MSDN文檔:

public FileInfo[] GetFiles(    string searchPattern,    SearchOption searchOption)

在 searchPattern 中使用星號萬用字元時(例如,“*.txt”),匹配行為會根據指定副檔名的長度而有所不同。副檔名正好是三個字元的searchPattern 將返回副檔名為三個或更多字元的檔案,其中前三個字元與searchPattern
中指定的副檔名匹配。副檔名為一個、兩個或三個以上字元的
searchPattern 僅返回副檔名長度正好與searchPattern 中指定的副檔名匹配的檔案。使用問號萬用字元字元時,此方法僅返回與指定副檔名匹配的檔案。例如,假設目錄下有兩個檔案“file1.txt”和“file1.txtother”,使用“file?.txt”搜尋模式時只返回第一個檔案,而使用“file*.txt”搜尋模式時會同時返回這兩個檔案。

以下列表顯示了 searchPattern 參數的不同長度的行為:

  • “*.abc”返回副檔名為 .abc、.abcd、.abcde、.abcdef 等的檔案。

  • “*.abcd”只返回副檔名為 .abcd 的檔案。

  • “*.abcde”只返回副檔名為 .abcde 的檔案。

  • “*.abcdef”只返回副檔名為 .abcdef 的檔案。

2 實際執行測試

然後執行如下測試代碼:

using System;using System.IO;namespace ConsoleApplication2{    class Program    {        static void Main(string[] args)        {            DirectoryInfo di = new DirectoryInfo(@"F:\test");            DirectoryInfo di2 = new DirectoryInfo(@"Y:\test");            FileInfo[] fis = di.GetFiles("*.doc", SearchOption.AllDirectories);            FileInfo[] fis2 = di2.GetFiles("*.doc", SearchOption.AllDirectories);            Console.WriteLine("位於本地硬碟上的檔案夾");            foreach (FileInfo fi in fis)            {                Console.WriteLine(fi.Name);            }            Console.WriteLine("位於SAMBA伺服器上的檔案夾");            foreach (FileInfo fi in fis2)            {                Console.WriteLine(fi.Name);            }        }    }}

註:代碼中的兩個檔案夾"F:\test"與"Y:\test"是內容完全一樣的,其中Y是一個映射分區,內容實際是一台samba伺服器共用的檔案夾,裡面是一些Word文檔,內容如下:

再看看程式的運行結果:

3 測試結果分析

可見,如果是本地硬碟,那麼確實如MSDN所說,*.doc既會匹配.doc也會匹配.docx文檔。但是如果目錄所在地不是本地硬碟(本例是Linux上的samba共用),那麼就只會匹配.doc而不會匹配.docx。

這也說明了MSDN的說法不夠準確,至少不全面。希望對大家有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.