Dateien synchronisieren
-
Guten Morgen.
Ich versuche aus einem Quellverzeichnis dll-Dateien zu updaten, die in älterer Form in einem Zielverzeichnis vorliegen. Leider scheine ich mit meinem bisherigen Sanatz nicht so ganz richtig zu liegen. Da ich noch Anfänger in MFC C++ bin, kann mir vielleicht einer von euch helfen oder zumindest eine Idee geben.
Derzeit versuche ich über die Erstellzeit etwas zu realisieren. Leider funktioneirt das noch nicht so, wie ich mir das vorstelle. Gibt's eine einfachere Möglichkeit in c++ Dateien zu kopieren, falls diese älter als die andere ist?
Vielen Dank!!!
void DLLkopieren ( void ) // Sind die DLL-Dateien im Client-Verzeichnis veraltet, wird die aktuelle Version aus dem TCC-Verzeichnis dorthin kopiert. { // Handle und Variablen deklarieren char servername[100], serverpfad[100]; CString Serverpath; HANDLE fHandle_quelle, fHandle_ziel; FILETIME ft; LARGE_INTEGER mine, file; WIN32_FIND_DATA wfd_quelle, wfd_ziel; //quelle = serververzeichnis, ziel = clientverszeichnis DWORD Attribut; //Pfad zum Quell-Verzeichnis auf der Server festlegen // GetPrivateProfileString("TamsyCfg", "Server","NULL", m_Servername, destSize, TAMINIFILE); GetPrivateProfileString(TAMINI_TAMSYCFG, "Server", "", servername, sizeof(servername), GetTamsyInifile()); //Serverpath = strcat servername + "Hallo"; //"\\TamsySvrBin\\tamexe\\*.dll" mine.LowPart=ft.dwLowDateTime; mine.HighPart=ft.dwHighDateTime; // Erste Datei im Ziel-Verzeichnis holen fHandle_ziel = FindFirstFile("c:\\program files\\tcc_flo\\tamacc\\*.dll",&wfd_ziel); fHandle_quelle = FindFirstFile("c:\\Tamsy\\cpp\\TamCpp\\TCC\\Debug\\*.dll",&wfd_quelle); do { // Eintrag nur behandeln, wenn es nicht . oder .. ist (werden nur bei Unterverzeichnissen mit zurückgeliefert) if ((!( (wfd_ziel.cFileName[0]=='.') && ( (wfd_ziel.cFileName[1]=='.' && wfd_ziel.cFileName[2]==0) || wfd_ziel.cFileName[1]==0 ) )) && (!( (wfd_quelle.cFileName[0]=='.') && ( (wfd_quelle.cFileName[1]=='.' && wfd_quelle.cFileName[2]==0) || wfd_quelle.cFileName[1]==0 ) ))) { if (wfd_ziel.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // Keine Datei, sondern ein Verzeichnis, daher Meldung ausgeben MessageBox(0,wfd_ziel.cFileName,"Folgendes Verzeichnis wurde gefunden:",0); } else { // Datei gefunden -> Erstellungszeitpunkt vergleichen file.LowPart=wfd_quelle.ftCreationTime.dwHighDateTime; file.HighPart=wfd_ziel.ftCreationTime.dwHighDateTime; // Prüfung und ggf Update der Datei if (file.HighPart < file.LowPart) { // Messagebox für Debug-Zwecke MessageBox(0,wfd_ziel.cFileName,"Folgende jüngere ZielDatei gefunden:",0); // Datei kopieren und falls vorhanden überschreiben CopyFile(wfd_quelle.cFileName, wfd_ziel.cFileName, true); } } } } while (FindNextFile(fHandle_ziel,&wfd_ziel)); //beenden FindClose(fHandle_ziel); FindClose(fHandle_quelle); }//Fkt DLLkopieren
-
Hallo,
zwei Dinge fallen mir zunächst auf:
du hast kein FindNextFile für fHandle_quelle, damit werden nicht alle Dateien behandelt.
für den Vergleich zweier FILETIME-Strukturen gibt es die Funktion CompareFileTime, siehe:
http://msdn.microsoft.com/en-us/library/ms724214(VS.85).aspx
MfG,
Probe-Nutzer