1. 程式人生 > >C#中Directory.GetFiles() 函式的使用方法(讀取目錄中的檔案)

C#中Directory.GetFiles() 函式的使用方法(讀取目錄中的檔案)

轉自:http://www.365jz.com/article/24023  

C#中Directory.GetFiles(string path , string searchPattern, SearchOption searchOption )

獲取path目錄中所有檔案

注:紅色字型部分為可選引數

引數

path

要搜尋的目錄的相對或絕對路徑。此字串不區分大小寫。

searchPattern

em>path</em>." id="mt1204">要與 path 中的檔名匹配的搜尋字串。此引數可以包含有效文字路徑和萬用字元(* 和 ?)的組合(請參見“備註”),但不支援正則表示式。

em>path</em>.">searchPattern可以是文字和萬用字元的組合字元,但不支援正則表示式。em>searchPattern</em>.">em>searchPattern</em>.">在允許使用下面的萬用字元說明符searchPattern

萬用字元說明符

匹配

* (星號)

在該位置的零個或多個字元。

?(問號)

在該位置的零個或一個字元。

     經本人測試發現:

     "*.mat"可搜尋到"box.mat"、"box.mat1"等格式的檔案,但是搜尋不到檔案"box.mat.meta"

searchOption

用於指定搜尋操作是應包含所有子目錄還是僅包含當前目錄的列舉值之一。

程式碼如下:

using System;
using System.Runtime.InteropServices;
namespace System.IO
{
[ComVisible (true)]
[Serializable]
public enum SearchOption
{
  TopDirectoryOnly,
  AllDirectories
}
}

SearchOption.TopDirectoryOnly  預設選項,僅包含當前目錄

SearchOption.AllDirectories   包含所有子目錄

返回值

指定目錄中與指定的搜尋模式和選項匹配的檔案的完整名稱(包含路徑)的陣列;如果未找到任何檔案,則為空陣列。

1、path使用相對路徑

string path = "Assets/model";

string[] files = Directory.GetFiles(path) ;

可通過Directory.GetCurrentDirectory()檢視當前路徑。

2、path使用絕對路徑

string path = "D:/UnityDemo/Assets/model"

string[] files = Directory.GetFiles(path

C# Directory.GetFiles()獲取多個型別格式的檔案

第一種方式
System.IO.Directory.GetFiles()獲取多個型別格式的檔案
System.IO.Directory.GetFiles("c:\","(*.exe|*.txt)");

第二種方式
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));

但這種寫法應該只有VS2008才支援,VS2005不支援

  directoryinfo 既可以獲取到所有資料夾,也可以獲取到所有檔案;directoryinfo GetDirectories() 是獲取指定目錄的所有資料夾,directoryinfo GetFiles() 是獲取指定目錄的所有檔案。

  有的時候寫程式碼要獲取幾種指定型別的檔案,例如要獲取指定目錄的所有視訊檔案,視訊檔案有很多種格式,如 rmvb、rm、avi、wav、mkv、mp4 等等,而 directoryinfo GetFiles() 一次只能傳遞一種格式的引數,所以就得分開獲取,在介紹獲取方法之前,先看 directoryinfo GetFiles() 的一些基本用法。



  一、C# directoryinfo getfiles獲取所有檔案

  如果要獲取指定目錄下的所有檔案,可用以下程式碼:
 

  /// <summary>
  /// C#獲取指定目錄下的所有檔案
  /// </summary>
  /// <param name="filePath">路徑</param>
  private void GetFiles(string filePath)
  {
    DirectoryInfo di = new DirectoryInfo(filePath);
    FileInfo[] afi = di.GetFiles("*.*");//*.*可以不要
  }


  呼叫方法:GetFiles(@"G:\xq\test");



  二、directoryinfo getfiles獲取一種指定型別檔案

  假如要獲取指定目錄下所有 .dat 檔案,跟方法也一樣,只不過把 *.* 改為 *.dat 即可,程式碼如下:
 

  /// <summary>
  /// C#獲取一種指定型別檔案
  /// </summary>
  /// <param name="filePath">路徑</param>
  private void GetFiles(string filePath)
  {
    DirectoryInfo di = new DirectoryInfo(filePath);
    FileInfo[] afi = di.GetFiles("*.dat");
  }


  呼叫方法:GetFiles(@"G:\xq\test");



  三、directoryinfo getfiles獲取多種指定型別檔案

  由於 getfiles() 一次只能獲到一種型別的檔案,所以只能先獲取到指定目錄下的所有檔案,再迴圈判斷每個檔案是否是要獲取的檔案;假如獲取指定目錄下的所有視訊檔案,實現程式碼如下:
 

  /// <summary>
  /// C#獲取指定目錄下多種指定型別檔案
  /// </summary>
  /// <param name="filePath">路徑</param>
  private void GetVideoFiles(string filePath)
  {
    DirectoryInfo di = new DirectoryInfo(filePath);
    FileInfo[] afi = di.GetFiles("*.*");
    string fileName;
    IList<string> list = new List<string>();

    for (int i = 0; i < afi.Length; i++)
    {
      fileName = afi[i].Name.ToLower();
      if (fileName.EndsWith(".rmvb") || fileName.EndsWith(".rm") || fileName.EndsWith(".avi") || fileName.EndsWith(".mp4"))
      {
        list.Add(fileName);
      }
    }
  }


  如果不同型別的檔案要求不同的操作,把並列的條件改 if(){} else if(){} 或 switch 語句即可。

  呼叫方法:GetVideoFiles(@"G:\xq\test");



連結:http://www.365jz.com/article/24023 
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。