我在c#中使用下面的函數來刪除文件夾中的所有內容;但是,我想知道是否可以添加到此功能只刪除文件擴展名爲「.dll」的文件。如何將File.Delete函數過濾爲某些文件擴展名?
Array.ForEach(Directory.GetFiles(DIRname), File.Delete);
謝謝。
我在c#中使用下面的函數來刪除文件夾中的所有內容;但是,我想知道是否可以添加到此功能只刪除文件擴展名爲「.dll」的文件。如何將File.Delete函數過濾爲某些文件擴展名?
Array.ForEach(Directory.GetFiles(DIRname), File.Delete);
謝謝。
您可以使用重載的方法Directory.GetFiles(string,string)
topass是searchPattern爲*.dll
獲得與.dll
擴展的所有文件,則返回匹配指定 的文件(包括其路徑)的名字在指定的目錄中搜索模式。
試試這個:
Directory.GetFiles(DIRname,"*.dll")
File.Delete
不支持任何通配符。
您可以使用以下兩個選項之一(使用「* .dll」通配符,您可以根據需要更改它)。
獲取所有文件並使用Parallel.ForEach並行刪除它們,比普通循環快得多。
var files = Directory.GetFiles(@"c:\mypath", "*.dll");
Parallel.ForEach(files, (f)=> File.Delete(f));
或者,使用Windows命令外殼用DEL命令:
Process process = new Process()
{
StartInfo = new ProcessStartInfo()
{
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
RedirectStandardInput = true,
RedirectStandardError = true,
FileName = "cmd.exe",
Arguments = @"/C del c:\mypath\*.dll",
}
};
process.Start();
process.WaitForExit();
並行刪除不太可能會更快。文件刪除的限制因素是文件系統訪問,這將被序列化。 –
確實如此,但固態硬盤可能會帶來一些優勢。可能會運行一個基準這是一個好主意:) – loopedcode
再一次,極不可能。訪問目錄信息是序列化的,因此它是否旋轉鏽蝕或SSD或RAM磁盤無關緊要。系統每個邏輯驅動器一次只能刪除一個文件。 –
KK對不起我遲鈍。 – Andrew
@Andrew:如果這個答案解決了你的問題,你應該將其標記爲已接受。 –
@JimMischel,你剛纔忘記了(由於時間限制)。 – Andrew