[英]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);
}
...只是为了查找给定路径中的所有文件/文件夹(位于程序执行路径的子目录中),然后删除它们。 但是,我得到以下异常:
访问路径“文件”被拒绝。
我试图以管理员身份运行该程序而没有运气; 但是,我想要一个不使用管理员权限的解决方案。
备注:
我收到此错误,发现这是因为我的测试文件是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.