С# проверьте, заблокирован ли текстовый файл ASCII/записан или записываетсяC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 С# проверьте, заблокирован ли текстовый файл ASCII/записан или записывается

Сообщение Anonymous »

название говорит само за себя.
распространенный метод:

Код: Выделить всё

protected virtual bool IsFileLocked(FileInfo file)
{
try
{
using(FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
{
stream.Close();
}
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}

//file is not locked
return false;
}
не работает с текстовым файлом ASCII. Я провел тест с кодом Python, который непрерывно записывает в текстовый файл, и на самом деле метод возвращает FALSE (не заблокирован), в то время как на самом деле какое-то другое приложение использовало файл для записи в него.
Я могу проверить с помощью метод, если файл изменяется в течение короткого периода времени, но это будет очень неэффективно, если повторять много файлов (т. е. 500 мс для более чем 1000 файлов будут составлять 8 минут ожидания).
один из подходов, который действительно работает состоит в том, чтобы попытаться выполнить File.Move() и посмотреть, возвращает ли он исключение. если да, то файл занят. я не знаю

Код: Выделить всё

t like this approach because in case of problems it could damage the file since it
фактически выполняет операцию над самим файлом.
это будет реализованный метод

Код: Выделить всё

public bool IsFileLocked(string filePath)
{
try
{
string tempFilePath = filePath + ".tmp";
File.Move(filePath, tempFilePath);
File.Move(tempFilePath, filePath);
return false; // File is not locked
}
catch (IOException)
{
return true; // File is locked
}
catch (UnauthorizedAccessException)
{
return true; // File is locked or access is denied
}
}
есть мысли?

Подробнее здесь: https://stackoverflow.com/questions/787 ... ng-written
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»