공유 네트워크 드라이브에 최신 버전의 파일이있는 경우 시작시 응용 프로그램이 확인합니다. 네트워크 공유에있는 공유 폴더가 최신 폴더 인 경우 공유 폴더를 로컬 응용 프로그램 디렉터리에 복사하고 이전 공유 폴더를 덮어 씁니다. 이 작업을 수행하는 나의 현재 코드는 다음과 같이 진행됩니다 로그를 확인. 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 파일입니다. 그것들은 "Windows 용 Growl"응용 프로그램을위한 어셈블리입니다. 사용자 정의 디스플레이를 정의합니다. 내 응용 프로그램의 의도는 네트워크 공유를 확인하여 사용 가능한 최신 버전이 있는지 확인하고 필요할 경우 로컬로 복사하는 것입니다. 그렇게하면 모든 고객이 최신 디스플레이를 사용하도록 할 수 있습니다.
편집 2 :
OK, 나는 어셈블리를로드 주변에 속지, 나는 또 다른 문제 다 퉜다. Assembly.ReflectionOnlyLoadFrom
을 통해로드 된 다른 위치의 파일이라 할지라도 동일한 파일을 두 번로드 할 수없는 것 같습니다.
저는 주로 DLL을 복사하기 때문에이 옵션이 아닙니다. 아마도 DLL의 빌드 시간에 대한 정보를로드하는 방법이 있습니까? – Anthony
@Duracell - DLL에 관한 것이라면 최신 버전이든 최신 버전이든 현재 가지고있는 것과 다른지 여부가 중요합니까? IOW, 네트워크 공유에있는 DLL (있는 경우)이 정의에 의해 실행하려는 파일이 아닐까요? 분명히 여기에 당신의 프로세스에 대해 뭔가를 가정합니다 - 당신은 같은 DLL을 로컬로 구축하지 않습니다. – arootbeer
조립품입니까? 너는 그들을 통제 할 수 있니? 그렇다면 아마도 AssemblyName.Version 속성이 유용 할 것입니다.그렇지 않으면 파일 자체에 대한 메타 데이터를 다른 파일이나 포함 된 폴더에 저장할 수 있습니다. 우리가 당신을 도울 때 사용할 수있는 문맥 정보가 더 있습니까? –