2016-08-02 48 views
1

我要刪除我的軟件的本地路徑中的所有文件,除了我的軟件刪除所有文件在本地路徑

我的腳本:

string a = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
Array.ForEach(Directory.GetFiles(a), File.Delete); 

錯誤:

未處理的異常鍵入'System.UnauthorizedAccessException' 發生在mscorlib.dll

附加信息: L'accèsau chemin d'accès 'D:\ FWeb \ AutoUpdate \ AutoUpdate \ bin \ Debug \ AutoUpdate.exe'estrefusé。

+0

您正在試圖刪除正在運行的文件... –

+1

有大量的「刪自己的可執行文件」的問題https://www.bing.com/search?q=c%23+delete+own + exe - 我相信你已經閱讀過......但不知何故,這些關於你所嘗試過的信息沒有進入帖子.... –

回答

0

您只需篩選出自己的組件。當然,你不能刪除當前正在運行的二進制文件,因此從列表中排除:

string location = Assembly.GetEntryAssembly().Location; 
string a = System.IO.Path.GetDirectoryName(location); 
string[] files = Directory.GetFiles(a).Where(f => f != location).ToArray(); 
Array.ForEach(files, File.Delete); 

爲了避免區分大小寫的問題,你可以考慮

string[] files = Directory.GetFiles(a) 
          .Where(f => !f.Equals(location, StringComparison.OrdinalIgnoreCase)) 
          .ToArray(); 

代替。

2

您正試圖刪除正在使用的文件 - 很可能是當前進程的可執行文件。您可以跳過此特定文件,但請注意,如果它加載了任何庫(.dll文件),它們也可能會被鎖定。其他文件也可能正在使用中(例如.pdb文件,資源等),因此請確保您排除所有類似內容。

var assemblyPath = Assembly.GetEntryAssembly().Location; 
var pathsToExclude = new[] { assemblyPath }; 
string a = System.IO.Path.GetDirectoryName(assemblyPath); 
foreach (var file in Directory.EnumerateFiles(a).Except(pathsToExclude)) 
    File.Delete(file);