从目录中获取文件时排除某些文件扩展名

时间:2009-04-16 08:04:51

标签: c#

从目录中获取文件时如何排除某些文件类型?

我试过

var files = Directory.GetFiles(jobDir);

但似乎此功能只能选择您要包含的文件类型,而不能排除。

10 个答案:

答案 0 :(得分:83)

你应该自己过滤这些文件,你可以这样写:

    var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml"));

答案 1 :(得分:13)

您可以尝试这样的事情:

  var allFiles = Directory.GetFiles(@"C:\Path\", "");
  var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt");
  var wantedFiles = allFiles.Except(filesToExclude);

答案 2 :(得分:11)

  

我知道,这是一个古老的要求,但关于我,这一直很重要。

如果您想要排除文件扩展名列表:(基于https://stackoverflow.com/a/19961761/1970301

var exts = new[] { ".mp3", ".jpg" };



public IEnumerable<string> FilterFiles(string path, params string[] exts) {
    return
        Directory
        .GetFiles(path, SearchOption.AllDirectories)
        .Where(file => !exts.Any(x => file.Extension.EndsWith(x, StringComparison.OrdinalIgnoreCase)));
}

答案 3 :(得分:10)

我想你可以使用lambda表达式

var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext"))

答案 4 :(得分:3)

你可以试试这个,

var directoryInfo = new DirectoryInfo("C:\YourPath");
var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb");

答案 5 :(得分:0)

Afaik无法指定排除模式。 您必须手动执行此操作,例如:

string[] files = Directory.GetFiles(myDir);
foreach(string fileName in files)
{
    DoSomething(fileName);
}

答案 6 :(得分:0)

这是我在上面阅读的答案的版本

List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>();

答案 7 :(得分:0)

我遇到了这个寻找一种方法来执行此操作,其中排除可以使用搜索模式规则而不仅仅是EndWith类型逻辑。

e.g。搜索模式通配符说明符匹配:

  • *(星号)该位置的零个或多个字符。
  • ? (问号)该位置有零个或一个字符。

这可用于以上内容。

string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.*").Except(Directory.GetFiles(dir, "*.xml"));

或者排除否则将被包含的项目。

string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.txt").Except(Directory.GetFiles(dir, "*HOLD*.txt"));

答案 8 :(得分:0)

我用过那个

  

<强> Directory.GetFiles(PATH, "*.dll"))

和PATH是:

  

public static string _PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。Location);

答案 9 :(得分:-4)

string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der");

foreach (string fileName in filesToDelete)
{
    File.Delete(fileName);
}