Файл заблокирован только при копировании / вставке, а не при вырезании / вставке
Я отслеживаю папку для новых файлов, и когда новый файл присутствует, я читаю (и сохраняю в 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
}