【问题标题】:C# Cannot Delete File - System.UnauthorizedAccessExceptionC# 无法删除文件 - System.UnauthorizedAccessException
【发布时间】:2010-11-18 14:37:44
【问题描述】:

我正在运行一个单独的进程来最小化一个 javascript 文件的文件夹。此过程为每个 js 文件创建一个新文件,并附加“_min.js”。下一步是删除旧的 js 文件(那些没有“_min.js”的文件)。由于某种原因 File.Delete 无法删除这些文件。

似乎某些进程仍然拥有这些文件的句柄。尝试删除时出现 System.UnauthorizedAccessException 异常。我对此文件夹有足够的权限。谁能告诉我我忽略了什么?

我在这个循环中多次运行该过程。

 foreach (var fileInfo in jsFiles)
            {
                var outFileName = fileInfo.FullName.Replace(".js", "_min.js");

                var compressorPath = "\"C:\\Dev\\Team Interactive Tools\\trunk\\Infrastructure\\MsBuild\\lib\\yuicompressor-2.4.2.jar\"";
               StringBuilder stringBuilder = new StringBuilder("-jar " + compressorPath + " ");
               stringBuilder.Append("\"" + fileInfo.FullName + "\"");
               stringBuilder.Append(" -o " + "\"" + outFileName + "\"");

                Process p = new Process();
                p.StartInfo.FileName = "\"C:\\Program Files (x86)\\Java\\jre6\\bin\\java\"";
                p.StartInfo.Arguments = stringBuilder.ToString();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.Start();

            }

            return true;
        }

然后我尝试删除原件:

   private void RemoveOrginalJs(FileInfo[] files)
    {
        foreach (var fileInfo in files)
        {
                File.Delete(fileInfo.FullName);
        }
    }

我在每个进程运行后都尝试了 Process.close() 但它没有区别。

【问题讨论】:

  • 没有更多来自您的反馈。现在可以用了吗?

标签: c# file-io process


【解决方案1】:

我不知道您正在启动的工具,但等待它完成似乎是正确的做法:

p.Start();
p.WaitForExit();

【讨论】:

    【解决方案2】:

    也许线程仍然锁定文件?您是否要等它们完成后再尝试删除?

    【讨论】:

      【解决方案3】:

      尝试 Process.Kill() 并在之后删除。
      此外,您还必须检查脚本是否未在另一个进程中运行。要确定这一点,请尝试使用Unlocker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-13
        • 2019-02-14
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多