Файл заблокирован только при копировании / вставке, а не при вырезании / вставке

Я отслеживаю папку для новых файлов, и когда новый файл присутствует, я читаю (и сохраняю в txt) файл следующим образом:

FileStream file = File.Open(this.filePath, FileMode.Open, FileAccess.Read);
StreamReader reader = new System.IO.StreamReader(file);
string text = reader.ReadToEnd();
reader.Close();

Если я копирую / вставляю в папку исходный файл, я получаю IOExcpetion, который сообщает мне, что файл используется другим процессом. Если я вырезал / вставил в папку, все работает. Кроме того, проблема блокировки также возникает, если я копирую (но в этом случае также обрезаю)/ вставляю файл с другого компьютера в контролируемую папку.

У вас есть представление о том, что происходит?

Существует более безопасный способ доступа к файлу, чтобы избежать блокировок такого типа?

Спасибо!

1 ответ

Вот небольшой фрагмент, который я делаю, чтобы убедиться, что файл завершен копированием или не используется другим процессом.

 private bool FileUploadCompleted(string filename)
    {
        try
        {
            using (FileStream inputStream = File.Open(filename, FileMode.Open,
                FileAccess.Read,
                FileShare.None))
            {
                return true;
            }
        }
        catch (IOException)
        {
            return false;
        }
    }

Тогда вы можете реализовать это до вашей логики процесса

while (!FileUploadCompleted(filePath))
{
    //if the file is in use it will enter here
    //So you could sleep the thread here for a second or something to allow it some time
    // Also you could add a retry count and if it goes past the allotted retries you
    // can break the loop and send an email or log the file for manual processing or
    // something like that

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