搜索目录,不包括某些文件扩展名列表

时间:2012-07-12 13:52:40

标签: c# directory streamreader file-type

我使用以下代码行来获取输入路径下所有文件的列表:

Files = Directory.GetFiles(path, ".", SearchOption.AllDirectories);

但是,我想要做的是,而不是获取所有文件,我想排除任何具有特定文件扩展名的文件。我正在从文本文件中读取要忽略的文件扩展名列表,该文件文件每行有一个文件扩展名(“ .pdf”,“ .dll”等)。我使用以下代码从文本文件中加载要忽略的文件扩展名列表:

  ArrayList line = new ArrayList();
  using (StreamReader reader = new StreamReader(Server.MapPath("~/TextFile.txt")))
  {
      while (!reader.EndOfStream)
      {
          line.Add(reader.ReadLine());
      }
   }

我的问题是,我现在如何限制我的文件搜索不包含任何与这些文件扩展名相匹配的文件?我不想将这些类型的文件添加到我的Files字符串数组中。

4 个答案:

答案 0 :(得分:3)

Files = Directory.GetFiles(path, ".", SearchOption.AllDirectories)
.Where(fileName => !line.Contains(Path.GetExtension(fileName))
.ToList();

答案 1 :(得分:2)

在添加到arraylist之前检查扩展名:

string file = reader.ReadLine();
if (!stringArrayWithExtensions.Contains(Path.GetExtension(file).ToLower()))
    line.Add(file);

答案 2 :(得分:1)

稍微阅读你的问题,答案是否定的,我不相信有一种“简单”的方法来做你想做的事。

您必须先阅读所有文件名,然后根据其扩展名进行手动过滤(请参阅System.IO.Path.GetExtension]。

答案 3 :(得分:1)

您无法指定要排除的文件扩展名列表,因此您只需获取完整列表并自行过滤。例如,这样的事情应该有效:

List<string> fileExtensionsToIgnore = new List<String>(File.ReadAllLines("~/TextFile.txt"));
List<string> fileList = new List<string>();
foreach (string filePath in Directory.GetFiles(Path, ".", SearchOption.AllDirectories))
{
    if (!fileExtensionsToIgnore.Contains(Path.GetExtension(filePath).ToLower())
        fileList.Add(filePath);
}
string[] files = fileList.ToArray();