File.Create из IIS блокирует созданный файл - PullRequest
0 голосов
/ 22 февраля 2011

У меня работает ASP.NET в IIS 7.5, который создает файлы в локальной файловой системе и затем пытается удалить после выполнения некоторой логики между созданием и удалением.Я сталкиваюсь с ситуацией, когда удаление завершается неудачно с ответом типа «Процесс не может получить доступ к файлу» C: ... \ Uploads \ c1fe593f-85de-4de1-b5d1-7239e1fc0648_Tulips.jpg ', поскольку он используетсядругим процессом. '"Файл, кажется, заблокирован IIS, и я не могу удалить его.Вот пример кода для создания и удаления:

// File.WriteAllBytes(path, rawData); // this seems to leave the file open!
using (var file = File.Create(path))
{
    file.Write(rawData, 0, rawData.Length);
    file.Close(); // should close when it goes out of scope, but just to be safe
}

Есть ли какая-то особая опция, которую мне нужно передать в File.Create?Как мне обойти это?

1 Ответ

0 голосов
/ 22 февраля 2011

File.WriteAllBytes(path, rawData); должно работать нормально, если параметр пути, который вы передаете, уникален, и у вас нет одновременных запросов на одну запись и другую, пытающуюся читать одновременно. Чтобы убедиться в этом, вы можете использовать ReaderWriterLockSlim для синхронизации доступа, если такая ситуация потенциально может возникнуть. Также убедитесь, что нет других частей кода, которые могли бы утечь дескриптор файла.

Взгляните на SysInternals Process Explorer , который может позволить вам точно знать, где утечка этого дескриптора файла.

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