C # не может удалить файл - System.UnauthorizedAccessException - PullRequest
0 голосов
/ 18 ноября 2010

Я запускаю отдельный процесс, который минимизирует папку файлов 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 () после каждого запуска процесса, но это не делает различий.

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

Я не знаю инструмент, который вы запускаете, но ожидание его завершения как-то кажется правильным:

p.Start();
p.WaitForExit();
0 голосов
/ 18 ноября 2010

Попробуйте Process.Kill () и затем удалите.
Кроме того, вы должны проверить, не работает ли скрипт в другом процессе. Чтобы определить это, попробуйте использовать Unlocker .

0 голосов
/ 18 ноября 2010

Может быть, у потоков по-прежнему заблокирован файл? Вы ждете, пока они закончат, прежде чем пытаться удалить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...