Каталог заблокирован после создания файла во время работы программы

После того, как я создал файл в каталоге, каталог заблокирован, пока работает моя программа, создавшая файл. Есть ли способ снять блокировку? Мне нужно переименовать каталог через пару строк, и я всегда получаю IOException говоря "Доступ к пути"... "отказано".

Directory.CreateDirectory(dstPath);
File.Copy(srcPath + "\\File1.txt", dstPath + "\\File1.txt"); // no lock yet
File.Create(dstPath + "\\" + "File2.txt"); // causes lock

3 ответа

Решение

File.Create(string path) Создает файл и оставляет поток открытым.

вам нужно сделать следующее:

Directory.CreateDirectory(dstPath);
File.Copy(srcPath + "\\File1.txt", dstPath + "\\File1.txt");
using (var stream = File.Create(dstPath + "\\" + "File2.txt"))
{
    //you can write to the file here
}

Оператор using заверяет вас, что поток будет закрыт, а блокировка файла будет снята.

Надеюсь это поможет

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

var fs = File.Create(dstPath + "\\" + "File2.txt"); // causes lock
fs.Close();

Я предлагаю вам использовать using заявление:

using (var stream = File.Create(path))
{
   //....
}

но вы также должны знать об использовании инициализаторов объектов при использовании операторов:

using (var stream = new FileStream(path) {Position = position})
{
  //....
}

в этом случае он будет скомпилирован в:

var tmp = new FileStream(path);
tmp.Position = position;
var stream = tmp;

try
{ }
finally
{
    if (stream != null)
        ((IDisposable)stream).Dispose();
}

и если Position исключение броска сеттера, Dispose() не будет вызываться для временной переменной.

Другие вопросы по тегам