2015-02-09 108 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))