Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件。对路径的删除访问被拒绝_C#_File - Fatal编程技术网

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