2009-10-25 71 views

回答

44

爲了擴大在亨克的答案,你需要:

string rootFolderPath = @"C:\\SomeFolder\\AnotherFolder\\FolderCOntainingThingsToDelete"; 
string filesToDelete = @"*DeleteMe*.doc"; // Only delete DOC files containing "DeleteMe" in their filenames 
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete); 
foreach(string file in fileList) 
{ 
    System.Diagnostics.Debug.WriteLine(file + "will be deleted"); 
// System.IO.File.Delete(file); 
} 

要非常小心!

請注意,我已經註釋掉delete命令。運行它並仔細測試它然後讓它實際刪除任何東西!

如果你想在根文件夾的所有子文件夾遞歸刪除文件,添加,System.IO.SearchOption.AllDirectories);到GetFiles調用。

如果你做到這一點也是非常好主意,拒絕運行,如果rootFolderPath小於長大約4個字符(針對C刪除一切簡單的保護:\ - 我一直在那裏,做起來難這和它的不好玩!)

+2

不要忘記捕捉異常,處理情況下的文件正在使用,或者訪問被拒絕,等 – Bryan 2009-10-25 09:17:53

+1

是啊,這一點我作爲練習留給讀者;-) – 2009-10-25 14:01:26

+0

謝謝。也添加了catch例外。 – user 2009-10-26 05:55:33

8

您可以使用System.IO.Directory.GetFiles()到文件列表中的String []格式。

然後你可以使用 System.IO.File.ReadAllText()閱讀完整的文件,或者如果他們是非常大的,打開的TextReader與 System.IO.File.OpenText()

如果你正在尋找一個文字關鍵字,String.Contains()是你所需要的。

刪除文件可以用System.IO.File.Delete()完成。確保文件再次關閉。

編輯的GetFiles() 2個例子:

string[] fileNames = System.IO.Directory.GetFiles(@"C:\"); 
string[] fileNames = System.IO.Directory.GetFiles(@"C:\", @"*.sys"); 
+0

哎呦,猜我應該說它有點不同。我不需要檢查文件本身,而只需檢查文件名。 – user 2009-10-25 08:39:38

+0

然後您可以跳過ReadAllText/TextReader步驟。 – 2009-10-25 08:40:22

+0

沒有必要讀取所有文本。例如。如果文件從Apple開始,它是50mb ...更好的方法是使用幻燈片窗口順序讀取文件。 – 2009-10-25 08:40:30

5

或多或少,這樣的:

string DeleteThis = "apple"; 
string[] Files = Directory.GetFiles(@"C:\Folder"); 

foreach (string file in Files) 
{ 
    if (file.ToUpper().Contains(DeleteThis.ToUpper())) 
    { 
     File.Delete(file); 
    } 
} 
0
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); }); 
4
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { 
    if (file.IndexOf("apple", StringComparison.OrdinalIgnoreCase) >= 0) 
     File.Delete(file); 
}); 

new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { 
    Regex re = new Regex("apple", RegexOptions.IgnoreCase); 
    if (re.IsMatch(file)) 
     File.Delete(file); 
}); 
相關問題