C# 文件。对路径的删除访问被拒绝
我的控制台应用程序正在工作时创建一些运行时文件,因此我要做的是在应用程序启动时删除所有这些文件。我试过这个:C# 文件。对路径的删除访问被拒绝,c#,file,C#,File,我的控制台应用程序正在工作时创建一些运行时文件,因此我要做的是在应用程序启动时删除所有这些文件。我试过这个: public static void Empty(string targetDir) { var directory = new DirectoryInfo(targetDir); if (!directory.Exists) return; foreach (var file in directory.GetFiles()) 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);
}
…只需查找给定路径(位于程序执行路径的子目录中)中的所有文件/文件夹,然后将其删除。但是,我得到以下例外情况:
对路径“文件”的访问被拒绝
我试图以管理员的身份运行该程序,但运气不佳;但是,我需要一个不使用管理员权限的解决方案
注:
使用Windows API MoveFileEx可能是一个潜在的解决方案,其参数为MOVEFILE_DELAY_UNTIL_REBOOT,以便仅在重新启动后删除文件
请检查。尝试使用
Microsoft.VisualBasic.FileIO.FileSystem
方法,因为它有一个方便的删除目录
方法,我不久前遇到了访问问题,这是我问题的修复方法
var directory = new DirectoryInfo(targetDir);
if (directory.Exists)
{
Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(targetDir, Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);
}
您说文件未在其他应用程序中打开,但必须在您的应用程序中打开:
//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);
}
我发现这个错误是因为我的测试文件是只读的。更改此设置后,我现在可以使用fileinfo删除它们,不用担心。只是疑问:您真的删除了应用程序路径中的所有文件吗?我只想说,因为您的程序也是一个文件。Ofc否,我删除的文件位于应用程序路径中的子目录中。错误消息给出的实际值是多少?您已经在那里替换了
'file'
。是的,看看哪一个在抱怨,这应该很容易跟踪-可能有两件事。另外,请尝试手动删除该文件等。您有一个非常明确的调试案例。这是否存在于.Net 2中?首先,我认为这也是一个visual basic代码,我在.Net 2中找不到它。您必须添加参考Microsoft.VisualBasic
,最终最简单的方法是从C#调用本机代码。快速搜索显示了一个很好的例子,肯定会让你高兴起来:虽然这可能会回答这个问题,但也请添加一个简短的解释,说明你的代码是做什么的,以及为什么它解决了最初的问题。
if (File.Exists(filePath))
{
File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);
}