Файл перезаписи, если более новый в.NET

Мое приложение проверяет запуск, если существует более новая версия файла на общем сетевом диске. Если тот на сетевом ресурсе является более новым, он копирует его в каталог локального приложения и перезаписывает старый. Мой текущий код, чтобы сделать это проходит примерно так:

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.

1
задан Peter Mortensen 17 August 2013 в 13:23
поделиться

2 ответа

В документации для LastWriteTime отмечается, что возвращаемое значение может быть неточным. Обратите внимание на комментарий к методу Refresh - хотя приведенный выше код почти наверняка не потребует его вызова, если вы создаете объекты FileInfo и удерживаете их в течение любого времени, это может быть применимо .

Windows вправе отложить обновление фактического времени последней записи для файла - чтобы узнать, на сколько это может быть отложено, проверьте вызовы Windows API, имеющие дело с информацией о файле.

1
ответ дан 2 September 2019 в 22:51
поделиться

Согласно MSDN:

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

Если возможно, я бы попробовал один из следующих способов:

  • Вложить дату в имя файла
  • Хранить версию или дату файла в его содержимом.

Таким образом, вам не придется беспокоиться о проблемах, связанных со свойством LastWriteTime.

1
ответ дан 2 September 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: