Каталог заблокирован после создания файла во время работы программы
После того, как я создал файл в каталоге, каталог заблокирован, пока работает моя программа, создавшая файл. Есть ли способ снять блокировку? Мне нужно переименовать каталог через пару строк, и я всегда получаю 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()
не будет вызываться для временной переменной.