2015-02-09 74 views
1

我在使用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

+0

不能确定是怎么回事,该行'VAR内容= Directory.GetFiles(@ “C:\测试” ,“sitemap * .file”);'应该返回所有以您的标准结尾的文件。刚刚尝试过您的代码,并且它按预期工作。 – Habib 2015-02-09 17:18:28

+0

我认为他正在谈论的文件称为“网站地图”,没有扩展名。这是正确的格雷格? – pm100 2015-02-09 17:20:09

+1

“,但Windows分配一个原始的.File扩展名,因为它不知道如何处理它”。不,它不。在Windows资源管理器中查看您的文件夹。你能否在你的问题中加上一个实际文件的名称,该文件应该符合其标准。 – Habib 2015-02-09 17:20:14

回答

7

我相信你正在寻找搜索开始sitemap文件,并没有任何扩展。使用"sitemap*."模式。

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

注意最后的点()的模式,即指定要获取的没有任何与之相关的扩展名的文件。

这会给你喜欢的文件:

sitemap1 
sitemap2 

,将排除文件,如:

sitemap1.gz 
sitempa2.gz 
+1

你的正确,在我的例子中,当我做这个模式时,我一直忽略''.''。所以当我做'sitemap *'时,它抓住了所有。 – Greg 2015-02-09 17:42:38

+0

@Greg,在您的Windows资源管理器中启用文件扩展名,可以让您看到这些文件具有的实际文件扩展名,因此您将知道Windows不会为* raw *文件添加'.FILE'扩展名。 *(没有扩展名的文件)* – Habib 2015-02-09 17:48:09

+0

是的,那是当你在4AM编码而你的一半清醒时会发生什么。 – Greg 2015-02-09 17:49:24

1

文件分机。配置你的资源管理器不隐藏扩展名,你会看到。

如果你只想找名的文件,改变你的if到:

if(string.IsNullOrEmpty(file.Extension))