我需要檢查目錄以查看是否有任何文件的文件名包含特定關鍵字,如果有,刪除它們。這可能嗎?如果文件名包含某個單詞,則從目錄中刪除文件
例如,刪除其文件名包含關鍵字「蘋果」,「C:\Folder
」所有現有文件。
我需要檢查目錄以查看是否有任何文件的文件名包含特定關鍵字,如果有,刪除它們。這可能嗎?如果文件名包含某個單詞,則從目錄中刪除文件
例如,刪除其文件名包含關鍵字「蘋果」,「C:\Folder
」所有現有文件。
爲了擴大在亨克的答案,你需要:
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刪除一切簡單的保護:\ - 我一直在那裏,做起來難這和它的不好玩!)
您可以使用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");
哎呦,猜我應該說它有點不同。我不需要檢查文件本身,而只需檢查文件名。 – user 2009-10-25 08:39:38
然後您可以跳過ReadAllText/TextReader步驟。 – 2009-10-25 08:40:22
沒有必要讀取所有文本。例如。如果文件從Apple開始,它是50mb ...更好的方法是使用幻燈片窗口順序讀取文件。 – 2009-10-25 08:40:30
或多或少,這樣的:
string DeleteThis = "apple";
string[] Files = Directory.GetFiles(@"C:\Folder");
foreach (string file in Files)
{
if (file.ToUpper().Contains(DeleteThis.ToUpper()))
{
File.Delete(file);
}
}
new List<string>(Directory.GetFiles(@"C:\Folder")).ForEach(file => { if (file.ToUpper().Contains("apple".ToUpper())) File.Delete(file); });
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);
});
不要忘記捕捉異常,處理情況下的文件正在使用,或者訪問被拒絕,等 – Bryan 2009-10-25 09:17:53
是啊,這一點我作爲練習留給讀者;-) – 2009-10-25 14:01:26
謝謝。也添加了catch例外。 – user 2009-10-26 05:55:33