2011-04-01 185 views
6

刪除除文件(index.dat)之外的目錄中的所有內容我試圖清除Cookie文件夾和文件的臨時文件夾,但出現錯誤當我嘗試刪除index.dat,因爲它被另一個進程使用。有沒有辦法刪除temp和cookies文件夾中的所有內容,但 index.dat文件除外?這裏是我的代碼:刪除除C#中的文件以外的所有文件夾

string userProfile = Environment.GetEnvironmentVariable("USERPROFILE"); 
string strDirLocalq = Path.Combine(userProfile, "AppData"); 
string strDirLocalw = Path.Combine(strDirLocalq, "Roaming"); 
string strDirLocale = Path.Combine(strDirLocalw, "Microsoft"); 
string strDirLocalr = Path.Combine(strDirLocale, "Windows"); 
string strDirLocalt = Path.Combine(strDirLocalr, "Cookies"); 

string[] filePaths = Directory.GetFiles(strDirLocalt); 
foreach (string filePath in filePaths) 
    File.Delete(filePath); 
+3

您可以將您的'File.Delete()'放在try/catch塊中,以處理無法刪除的文件,而不會中斷循環(如果您這樣選擇的話)。 – Jon 2011-04-01 23:26:03

回答

9

這工作:

string[] filePaths = Directory.GetFiles(strDirLocalt); 
foreach (string filePath in filePaths) 
{ 
    var name = new FileInfo(filePath).Name; 
    name = name.ToLower(); 
    if (name != "index.dat") 
    { 
     File.Delete(filePath); 
    } 
} 
+0

謝謝,它的工作。 – llk 2011-04-01 23:34:53

+0

不客氣:-)我稍微修改它以使用FileInfo類。 – Pol 2011-04-01 23:39:42

0

剛剛從名單中篩選,它

foreach (string filePath in filePaths.Where(!filePath.Contains("index.dat")) 
    File.Delete(filePath); 
+1

如果您要更一般地應用它,修改要跳過的文件列表會很麻煩。如果您要使用where-not樣式,將來可以節省您將所有跳過的文件放入靜態數組,然後使用'filePaths.Where(fp =>!skipped.Any(s => fp.Contains (s)))'...... – Jon 2011-04-01 23:28:53

3

只需將圍繞File.Delete一個try/catch,因爲可能有更多的文件正在使用中也將拋出例外。

try 
{ 
    File.Delete(filePath); 
} 
catch (Exception ignore) 
{ 
} 
+1

這很好。無論如何,你仍然需要遍歷文件,所以我會結合2解決方案:tster's和Hams的 – Adi 2011-04-01 23:29:12

0

爲什麼不只是捕捉到了異常 - 也就是任何文件可能是在使用的時候你試圖刪除它們possiblility。

try{ 
    // delete 
} 
catch{ 
} 
1
string[] filePaths = Directory.GetFiles(strDirLocalt); 
foreach (string filePath in filePaths) 
try { 
    File.Delete(filePath); 
} 
catch{ } 
} 
3

看看這個有趣的解決方案!

List<string> files = new List<string>(System.IO.Directory.GetFiles(strDirLocalt)); 
files.ForEach(x => { try { System.IO.File.Delete(x); } catch { } }); 

感受語言之美!

+0

這也工作。謝謝!它抓取當前「正在使用」的任何文件,並阻止它被刪除。 – llk 2011-04-01 23:51:23

+0

Lambdas使這個郎愉快使用:) – Nickon 2013-05-13 12:46:16

0

一種方法可能仍然工作,是在安全模式下啓動和然後指派自己的管理員權限,然後看看你能不能找到要刪除的文件他們

我現在用的方法是創建一個批處理文件來重命名包含index.bat文件的文件夾下的子文件夾,然後僅將這些文件夾複製回原始位置,該位置不包含這些文件,但生成的批處理文件需要從單獨的滿足條件的Windows帳戶運行管理員權限。

相關問題