1

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

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

4 回答 4

3
Files = Directory.GetFiles(path, ".", SearchOption.AllDirectories)
.Where(fileName => !line.Contains(Path.GetExtension(fileName))
.ToList();
于 2012-07-12T13:59:44.407 回答
2

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

string file = reader.ReadLine();
if (!stringArrayWithExtensions.Contains(Path.GetExtension(file).ToLower()))
    line.Add(file);
于 2012-07-12T13:58:36.503 回答
1

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

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

于 2012-07-12T13:58:41.337 回答
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();
于 2012-07-12T14:02:32.447 回答