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


Log in to reply