C#无法删除文件 - System.UnauthorizedAccessException

时间:2010-11-18 14:37:44

标签: c# file-io process

我正在运行一个单独的进程,最小化javascript文件的文件夹。此过程为每个附加了“_min.js”的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;
        }

然后我尝试删除orginals:

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

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

3 个答案:

答案 0 :(得分:1)

我不知道你正在开始的工具,但等待它的完成似乎是正确的做法:

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

答案 1 :(得分:0)

也许线程仍然锁定了文件?在尝试删除之前,您是否等待他们完成?

答案 2 :(得分:0)

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