程序开发 > C# > 正文

C# directoryinfo getfiles获取所有文件和多种指定文件

亮术网 2020-07-11 本网原创

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");

 

四、directoryinfo getfiles 以指定搜索模式获取多种指定类型文件

getfiles() 可以指定搜索模式以模糊查找指定的文件,搜索条件可以用 *、? 等在正则表达式中用于表示任意字符的符号。实现代码如下:

  /// <summary>
  /// C#以指定搜索模式获取指定目录下多种指定类型文件
  /// </summary>
  /// <param name="filePath"> 路径 </param>
  /// <param name="searchPattern"> 搜索模式 </param>
  /// <param name="searchOption"> 搜索选项 </param>
  /// <returns>获取到的文件</returns>

  private ArrayList GetFiles(string filePath, string searchPattern, SearchOption searchOption)
  {
    if (string.IsNullOrEmpty(searchPattern))
      return null;

  string[] arrExt = searchPattern.Split('|');
    ArrayList arrLstFiles = new ArrayList();
    for (int i = 0; i < arrExt.Length; i++)
    {
       arrLstFiles.AddRange(Directory.GetFiles(filePath, arrExt[i], searchOption));
     }
     return arrLstFiles;
  }

调用方法(假如要在某个文件夹中获取所有 Word 和 Excel 文档与 jpg 图片):

ArrayList al = GetFiles(@"F:\fi\doc", "*.*x|*.jpg", SearchOption.TopDirectoryOnly);
  for (int i = 0; i < al.Count; i++)
     Response.Write(al[i] + "<br />");