2013-03-06 123 views
7

我的控制檯應用程序正在創建一些運行時文件,因爲它正在工作,所以我想要在應用程序啓動時刪除所有這些文件。我曾經嘗試這樣做:File.Delete對路徑的訪問被拒絕

public static void Empty(string targetDir) 
{ 
    var directory = new DirectoryInfo(targetDir); 
    if (!directory.Exists) return; 
    foreach (var file in directory.GetFiles()) file.Delete(); 
    foreach (var subDirectory in directory.GetDirectories()) subDirectory.Delete(true); 
} 

...只是爲了尋找所有的文件/文件中給出的路徑(這是在程序執行路徑的子目錄中)文件夾,然後將其刪除。但是,我得到以下例外:

訪問路徑'文件'被拒絕。

我試圖以管理員身份運行該程序沒有運氣;但是,我想要一個不使用管理員權限的解決方案。

注:

  1. 該文件未在其他應用程序中運行。
  2. 該文件不在受保護的文件夾中。
  3. 該文件可以手動刪除,沒有問題,這就是爲什麼我 在這裏。
+0

只是懷疑:你真的刪除應用程序路徑中的所有文件? – rcdmk 2013-03-06 23:23:29

+4

我只想說,因爲你的程序也是一個文件。 – rcdmk 2013-03-06 23:23:52

+0

Ofc不,我要刪除的文件位於應用程序路徑中的子目錄中。 – 2013-03-06 23:27:14

回答

1

嘗試使用Microsoft.VisualBasic.FileIO.FileSystem方法,因爲它有一個方便的DeleteDirectory方法,我有訪問麻煩前一段時間,這是我的問題的修復。

var directory = new DirectoryInfo(targetDir); 
if (directory.Exists) 
{ 
    Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(targetDir, Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents); 
} 
+0

ehm is這存在於.Net 2中? – 2013-03-06 23:51:06

+0

首先,我認爲這也是一個可視基本代碼,我無法在.Net 2 – 2013-03-06 23:55:46

+0

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.deletedirectory(v = vs80).aspx – 2013-03-07 00:01:13

1

使用Windows API MoveFileEx可能是一個潛在的解決方案,使用參數MOVEFILE_DELAY_UNTIL_REBOOT僅在重新啓動後才能刪除文件。

請檢查http://msdn.microsoft.com/en-us/library/aa365240%28v=vs.85%29.aspx

+1

這是在C#中使用? – 2013-03-06 23:32:49

+0

最簡單的方法就是從C#調用本機代碼。快速搜索顯示一個很好的例子,肯定會讓你振作起來:http://stackoverflow.com/questions/6077869/movefile-function-in-c-sharp-delete-file-after-reboot-c-sharp – Nostradamus 2013-07-14 18:22:37

4

你說這些文件是不是在另一個應用程序中打開,但它必須是你的應用程序中打開:

//Create some directories to delete 
Directory.CreateDirectory("C:/Temp/DeleteMe"); 
Directory.CreateDirectory("C:/Temp/DeleteMe/DeleteMe"); 
File.Create("C:/Temp/DeleteMe/DeleteMeFile");//FileStream still open!! 

//Delete the files 
var directory = new DirectoryInfo("C:/Temp/DeleteMe"); 
if (!directory.Exists) return; 
foreach (FileInfo file in directory.GetFiles()) 
{ 
    file.Delete(); 
} 
foreach (DirectoryInfo dir in directory.GetDirectories()) 
{ 
    dir.Delete(true); 
} 

確保您處理文件流,當你創建文件

//Create some directories to delete 
Directory.CreateDirectory("C:/Temp/DeleteMe"); 
Directory.CreateDirectory("C:/Temp/DeleteMe/DeleteMe"); 
using (File.Create("C:/Temp/DeleteMe/DeleteMeFile")) { } 

//Delete the files 
var directory = new DirectoryInfo("C:/Temp/DeleteMe"); 
if (!directory.Exists) return; 
foreach (FileInfo file in directory.GetFiles()) 
{ 
    file.Delete(); 
} 
foreach (DirectoryInfo dir in directory.GetDirectories()) 
{ 
    dir.Delete(true); 
} 
7

我得到這個錯誤,發現這是因爲我的測試文件是隻讀的。改變了這一點,我現在可以使用fileinfo刪除它們,不用擔心。

1
if (File.Exists(filePath)) 
{ 
    File.SetAttributes(filePath, FileAttributes.Normal); 
    File.Delete(filePath); 
} 
+0

雖然這可能會回答這個問題,但也請添加一個簡短說明您的代碼的功能以及爲什麼它可以解決最初的問題。 – user1438038 2017-08-10 07:04:49