Исключений C# файл: не удается получить доступ к файлу, так как он используется другим процессом
Я пытаюсь загрузить файл из интернета и сохранить его локально, но получаю исключение:
В C# процесс не может получить доступ к файлу "бла", потому что он используется другой процесс.
Это мой код:
File.Create("data.csv"); // create the file
request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
request.Timeout = 30000;
response = (HttpWebResponse)request.GetResponse();
using (Stream file = File.OpenWrite("data.csv"), // <-- Exception here
input = response.GetResponseStream())
{
// Save the file using Jon Skeet's CopyStream method
CopyStream(input, file);
}
Я видел множество других вопросов с тем же исключением, но ни один из них, похоже, не применяется здесь. Любой помочь?
обновление:
Спасибо за ответы! Удаление File.Create(...)
починил!
один комментарий к документации OpenWrite
: это немного вводит в заблуждение, краткое описание говорит:
открывает существующей файл для записи.
подробное описание говорит:
если существует файл, он открыт для пишу с самого начала. Существование файл не усекается.
обновление 2.0:
Похоже несоответствие между IntelliSense / F1 и онлайновой документацией. Я думал, что это должно быть то же самое, так как я разрешаю F1 подключаться к интернету, когда он отображает документацию.
4 ответов
выглядит как файл.Create возвращает открытый объект FileStream
http://msdn.microsoft.com/en-us/library/aa328775 (v=VS.71).aspx
попробовать
using (FileStream fs = File.Create("data.csv"))
и оставьте первый файл.Create
проблема в том, что файл.Метод Create фактически открывает файл и возвращает объект FileStream. Он не закроет файл, пока объект не будет собран мусор (что произойдет в неопределенное время). Объект FileStream по-прежнему создается независимо от того, используете вы его или нет. Попробуйте это:
using (Stream file = File.Create("data.csv"),
input = response.GetResponseStream())
{
// Save the file using Jon Skeet's CopyStream method
CopyStream(input, file);
}
первый. Файл.Создать возвращает поток, который вы должны использовать для доступа к файлу.
во-вторых, если это не решит проблему, если вы Google who lock
вы найдете программу, которая позволит вам определить, какой процесс обращается к файлу одновременно.