查找特定文件类型

时间:2015-02-09 17:12:26

标签: c#

使用System.IO时遇到了一个奇怪的问题。当您遍历目录以查找类型为File且没有扩展名的文件时,不会检测到该文件。

// Successful:
var files = DirectoryInfo(server.Path).GetFiles("sitemap*.*);
var contents = Directory.GetFiles(server.Path, "sitemap*.*", ...);

上面的代码在大多数情况下都足够了,但是如果你有其他类型的名字相同,那么它们也会被收集。

当您只想要sitemap.file时,会遇到我们的问题。

// Invalid Code:
var files = DirectoryInfo(server.Path).GetFiles("sitemap*.file);
var contents = Directory.GetFiles(server.Path, "sitemap*.file", ...);
var examples = DirectoryInfo(server.Path).GetFiles("sitemap*);

数组为空,但未找到任何原始.file扩展名文件。我假设问题发生是因为它实际上没有扩展名。

你如何规避这一限制?

更新:我知道我可以使用FileInfo[]在这些方面做一些事情,但希望找到一种更简单的方法然后迭代,然后与以下方法进行比较:

var files = DirectoryInfo(server.Path).GetFiles("sitemap*.*);
foreach(var file in files)
     if(file.Extension != ".gz" && file.Extension != ".xml")
     {
          // Do something with File.
     }

特别是如果您的目录中有各种各样的扩展名。你会认为这会占到这种类型,或者缺乏。

Multiple Empty Array

2 个答案:

答案 0 :(得分:7)

我相信您希望搜索以sitemap开头并且没有任何扩展名的文件。使用"sitemap*."模式。

var contents = Directory.GetFiles(server.Path, "sitemap*.");

注意模式中的最后一个点(。),它指定获取那些没有任何扩展名的文件。

这将为您提供以下文件:

sitemap1
sitemap2

并将排除以下文件:

sitemap1.gz
sitempa2.gz

答案 1 :(得分:1)

文件没有扩展名。将资源管理器配置为不隐藏扩展程序,您将看到。

如果您只是在寻找无扩展名文件,请将if更改为:

 if(string.IsNullOrEmpty(file.Extension))