File.Create, кажется, заблокировать файл.Как я могу избежать этого? - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть 2 потока, которые общаются, отправляя файлы друг другу.Когда поток № 1 выполняет

// Thread #1
File.Create(@"C:\somedir\response.done");

, тогда поток № 2 должен его удалить.

// Thread #2
while (!File.Exists(@"C:\somedir\response.done"))
    Thread.Sleep(100);


while (File.Exists(@"C:\somedir\response.done"))
    {
        try {
               File.Delete(@"C:\somedir\response.done");
            }
        catch { Thread.Sleep(1000); };

    }

Однако файл, похоже, заблокирован.В каталоге создается файл response.done, но он никогда не удаляется.Когда я пытаюсь удалить его вручную, то

«Действие не может быть завершено, поскольку файл открыт в MyProgram. Закройте файл и повторите попытку.»

Как мне избежать этого?1011 *

Ответы [ 4 ]

10 голосов
/ 06 сентября 2011

File.Create возвращает FileStream.Итак ... закройте его:

using(File.Create(path)) {
    // add contents here if needed
}

using гарантирует, что он Dispose() d, следовательно, закрыт.Примечание: также возможно, что некоторые аудиовизуальные системы будут мешать доступу к файлам, но обычно это не большая проблема.

1 голос
/ 03 ноября 2015

Вы также можете использовать .Close()

Таким образом, ваш код станет

// Thread #1
File.Create(@"C:\somedir\response.done").Close();
1 голос
/ 06 сентября 2011

Вам нужно закрыть FileStream созданный File.Create(@"C:\somedir\response.done");.

0 голосов
/ 06 сентября 2011

измените свой код на

// Thread #1
using (FileStream FS = File.Create(@"C:\somedir\response.done") ) {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...