Мое приложение проверяет запуск, если существует более новая версия файла на общем сетевом диске. Если тот на сетевом ресурсе является более новым, он копирует его в каталог локального приложения и перезаписывает старый. Мой текущий код, чтобы сделать это проходит примерно так:
FileInfo sourceFile = new FileInfo(source + "\\" + fileName);
if(sourceFile.Exists) {
FileInfo destFile = new FileInfo(destination + "\\" + fileName);
if (destFile.Exists && destFile.LastWriteTime >= sourceFile.LastWriteTime)
{
//Using log4net
log.Info("Current " + fileName + " is newer than the one on the server.");
return false;
}
}
Проверяя журналы, это иногда кажется этим LastWriteTime
из исходного файла не обнаруживается как более новый (событие, когда это). Я возможно получаю время записи и измененные перепутанные времена? У кого-либо есть идея того, как достигнуть этого?
РЕДАКТИРОВАНИЕ (и копия моего комментария ниже): файлы, которые я копирую, являются главным образом файлами DLL, которыми я управляю. Они - блоки для приложения "Рычание для Windows"; они определяют пользовательские дисплеи. Намерение моего приложения состоит в том, чтобы проверить сетевой ресурс, чтобы видеть, существует ли более новая доступная версия и скопировать это локально при необходимости. Тем путем мы можем помочь удостовериться, что все наши клиенты используют самый актуальный дисплей.
РЕДАКТИРОВАНИЕ 2:
Хорошо, я дурачился с загрузкой блоков, и я столкнулся с другой проблемой. Кажется, что Вы не можете загрузить тот же файл дважды, даже если они от различных местоположений, когда они загружаются через Assembly.ReflectionOnlyLoadFrom
.
В документации для LastWriteTime отмечается, что возвращаемое значение может быть неточным. Обратите внимание на комментарий к методу Refresh
- хотя приведенный выше код почти наверняка не потребует его вызова, если вы создаете объекты FileInfo и удерживаете их в течение любого времени, это может быть применимо .
Windows вправе отложить обновление фактического времени последней записи для файла - чтобы узнать, на сколько это может быть отложено, проверьте вызовы Windows API, имеющие дело с информацией о файле.
Согласно MSDN:
Этот метод может вернуть неточное значение, поскольку он использует собственные функции, значения которых могут не постоянно обновляться операционной системой системой.
Если возможно, я бы попробовал один из следующих способов:
Таким образом, вам не придется беспокоиться о проблемах, связанных со свойством LastWriteTime
.