Не удается получить доступ к файлу, потому что он используется другим процессом - PullRequest
3 голосов
/ 26 ноября 2008

У меня есть программа ASP.NET, где я загружаю файл из сети, используя метод DownloadFile класса webClient, и делаю в нем некоторые изменения. затем я сохраняю его в другую папку с уникальным именем. Когда я получаю эту ошибку

Процесс не может получить доступ к файлу 'D: \ RD \ dotnet \ abc \ abcimageupload \ images \ TempStorage \ tempImage.jpg', поскольку он используется другим процессом

Может кто-нибудь сказать мне, как решить эту проблему.

Ответы [ 6 ]

6 голосов
/ 26 ноября 2008

Как правило, я думаю, что ваш код должен выглядеть примерно так.

WebClient wc = new WebClient();
wc.DownloadFile("http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png", "Foo.png");
FileStream fooStream;
using (fooStream = new FileStream("foo.png", FileMode.Open))
{
    // do stuff
}
File.Move("foo.png", "foo2.png");
4 голосов
/ 27 ноября 2008

Я очень успешно использовал инструменты SysInternals для отслеживания того, какие приложения обращаются к файлам и вызывают проблемы такого рода.

Process Monitor - это инструмент, который вам нужен - установите его для фильтрации выходных данных только по файлам в интересующей вас папке, и вы сможете видеть каждый доступ к файлу.

Спасает необходимость угадывать, в чем проблема.

1 голос
/ 25 марта 2009

попробуйте следующее, установите ваш файловый поток в асинхронный режим (3-й параметр)

FileStream myStream = File.Create(fileName, results.Length,FileOptions.Asynchronous);
//make sure you close the file
myStream.Write(results, 0, results.Length);
myStream.Flush();
myStream.Close();
myStream.Dispose();

если это не удается, сбросьте атрибут файла b4, к которому вы обращаетесь

File.SetAttributes(Server.MapPath(sendFilepath), FileAttributes.Normal);
0 голосов
/ 08 апреля 2009

это может помочь .... извините, его VB не C, но эй ...

Это работает

    Dim fs As FileStream = Nothing
    fs = File.Create("H:\test.txt")
    fs.Close()
    File.Delete("H:\test.txt")

Это не выдает ошибку «файл используется другим процессом»

    File.Create("H:\test.txt")
    File.Delete("H:\test.txt")
0 голосов
/ 17 января 2009

Я не знаю, решит ли это вашу проблему ..

Я получил ту же ошибку при записи в текстовый файл и последующей попытке открыть его позже.

Это было решено путем сброса устройства записи и последующего закрытия после записи в файл.

0 голосов
/ 26 ноября 2008

Вы явно закрываете поток файлов после внесения изменений?

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