Перезаписать файл, если новее в .NET - PullRequest
1 голос
/ 22 июля 2010

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

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, которые я контролирую. Это сборки для приложения «Growl для Windows»; они определяют пользовательские дисплеи. Цель моего приложения - проверить общий сетевой ресурс, чтобы узнать, доступна ли более новая версия, и скопировать ее локально, если это необходимо. Таким образом, мы можем гарантировать, что все наши клиенты используют самые современные дисплеи.

РЕДАКТИРОВАТЬ 2:

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

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Согласно MSDN :

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

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

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

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

1 голос
/ 22 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...