У меня есть программа, которая должна загружать файлы из каталога, как только они будут записаны. Я получил FileSystemWatcher, чтобы уведомить меня об изменениях в каталоге. Вместо того, чтобы проверять событие на то, что изменилось, я просто перечисляю файлы и начинаю обрабатывать все, что я нашел.Чтение файла сразу после его написания Я получаю все нули (.net)
Чтобы предотвратить попытку прочитать файл, который до сих пор записываемый У меня есть код, как:
try {
fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,
FileShare.None);
message = new byte[fs.Length];
int br = fs.Read(message, 0, (int)fi.Length);
}
catch (Exception e) {
// I'll get it next time around
return;
}
finally {
if (fs != null)
fs.Close();
}
Проблема заключается в том, что для некоторых файлов, около 1 в 200, программе чтения всех нулей. Длина файла верна, но содержание кажется равным нулю. Когда я проверяю последний файл, я нахожу, что он содержит фактические правильные данные. Я думал, что способ открытия файла будет препятствовать преждевременному доступу к файлу.
Я тестирую это путем копирования файлов в каталог с помощью команды DOS «копировать InFile_0 * dropdir» (около 100 файлов на выполнение). Возможно, эта команда выполняет копию в два этапа: 1) выделить место и 2) и моя программа иногда прыгает в середине двух.
Какие-либо идеи относительно того, как это сделать, чтобы быть надежным?
Обновление: У меня нет контроля над программой написания - это может быть что угодно. Похоже, я должен защищать код.
Совет. Добавьте регистрацию для исключения. Не умолкайте. – Amy
Вы работаете с программой, которая не помещает никаких блокировок в файл. Например, для программ на языке C, fopen() позволяет любой программе читать и писать, пока файл открыт.Не так много способов победить за «ожиданием». –