Мое приложение проверяет запуск, если на общем сетевом диске имеется более новая версия файла. Если общий ресурс сети более новый, он копирует его в локальный каталог приложения и перезаписывает старый. Мой текущий код, чтобы сделать это звучит примерно так:Перезаписать файл, если новый в .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
исходного файла не обнаруживается, так как новые (случае, если она есть). Возможно ли, что время написания и измененные времена смущены? Кто-нибудь знает, как этого достичь?
EDIT (и копия моего комментария ниже): Файлы, которые я копирую, - это в основном файлы DLL, которыми я управляю. Это сборки для приложения «Growl for Windows»; они определяют пользовательские дисплеи. Цель моего приложения - проверить общий сетевой ресурс, чтобы узнать, существует ли более новая версия и скопировать ее локально, если это необходимо. Таким образом, мы можем помочь обеспечить, чтобы все наши клиенты использовали самый современный дисплей.
EDIT 2:
ОК, я дурачился с загрузкой сборки, и я столкнулся с другой проблемой. Кажется, вы не можете загрузить один и тот же файл дважды, даже если они из разных мест, когда они загружаются через Assembly.ReflectionOnlyLoadFrom
.
К сожалению, это не вариант, потому что я в основном копирую DLL. Возможно, есть какой-то способ загрузить информацию о времени сборки DLL? – Anthony
@Duracell - Если речь идет о DLL, имеет ли значение, новее или просто отличается ли она от той, что у вас есть? IOW, будет ли DLL на сетевом ресурсе (если таковой имеется) не файл, который вы хотите запустить по определению? Очевидно, я предполагаю что-то о вашем процессе, - что вы не строите одну и ту же DLL локально. – arootbeer
Являются ли они сборками? У вас есть контроль над ними? Если это так, возможно, свойство AssemblyName.Version будет вам полезно.В противном случае вы можете хранить метаданные о файлах вне самих файлов (в других файлах или в папке с содержимым). У вас есть более контекстная информация, которую мы можем вам помочь? –