簡體   English   中英

File.Delete拒絕訪問該路徑

[英]File.Delete Access to the path is denied

我的控制台應用程序正在創建一些運行時文件,所以我想要做的是刪除應用程序啟動時的所有這些文件。 我試過這個:

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. 該文件可以手動刪除沒有問題,這就是我在這里的原因。

我收到此錯誤,發現這是因為我的測試文件是readonly。 改變了這一點,我現在可以使用fileinfo刪除它們而不用擔心。

您說文件未在其他應用程序中打開,但必須在您的應用程序中打開:

//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);
}

使用Windows API MoveFileEx可能是一個帶有參數MOVEFILE_DELAY_UNTIL_REBOOT的潛在解決方案,只有在重新啟動后才能刪除文件。

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

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

var directory = new DirectoryInfo(targetDir);
if (directory.Exists)
{
    Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(targetDir, Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);
}
if (File.Exists(filePath))
{
    File.SetAttributes(filePath, FileAttributes.Normal);
    File.Delete(filePath);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM