Viele Dateien kopieren



  • Ich habe mir hier ein bisschen Code zusammen gezimmert. Geht auch super. Nur dabei wird nur eine Datei kopiert und es sollen alle mit der selben endung kopiert werden. Die Endung ist db. Hier der code

    CString path = GetCommandLine(); 
        int pos = path.ReverseFind( '\\'); 
        path = path.Mid(1, pos-1);
    	CString path2;
    	CString path1;
    
        path1 = path + "\\Backup"; 
        CreateDirectory(path1, NULL);
    
    	CFileFind file;
    
    	path2 = path + "\\*.db";
    	file.FindFile(path2, 0);
    	file.FindNextFile();
    
    	CString SourceFile = file.GetFilePath(); 
    
        path = path + "\\Backup\\";
    	CString DestinationFile = path; 
        DestinationFile += file.GetFileName(); 
    
        CopyFile(SourceFile, DestinationFile, FALSE);
    

    Hierbei wird noch bevor die Dateien kopiert werden ein Ordner namens Backup erstellt.



  • Es wird nur eine datei kopiert, weil du das alles in einer Schleife schreiben musst:

    CString path = GetCommandLine(); 
        int pos = path.ReverseFind( '\\'); 
        path = path.Mid(1, pos-1);
        CString path2;
        CString path1;
    
        path1 = path + "\\Backup"; 
        CreateDirectory(path1, NULL);
    
        CFileFind file;
        BOOL bResult = file.FindFile(path2, 0);
    
        path2 = path + "\\*.db";
        while( bResult )
        {
           bResult = file.FindNextFile();
    
           CString SourceFile = file.GetFilePath(); 
    
           path = path + "\\Backup\\";
           CString DestinationFile = path; 
           DestinationFile += file.GetFileName(); 
    
           CopyFile(SourceFile, DestinationFile, FALSE);
        }
    

    Müsste so eigentlich laufen...

    Gruß
    :: NoName ::



  • Leider nicht. So wie du es gemacht hast wurde überhaupt nichts kopiert. Ich hab denn einfach die Definition von path2 vor das BOOL gemacht und dann wurde wieder nur eins kopiert anstelle von allen



  • Dann liegt es an den Pfaden. Teste mal alle Pfade mit einer MessageBox, ob sie auch wirklich richtig sind...

    Gruß
    :: NoName ::



  • Also ich hab das jetzt in einer MessageBox ausgeben lassen und dort wird für jede Datei eine MessageBox aufgerufen mit jedem einzelnen Dateinamen. So wies sein soll. Aber er kopiert nur eine!! Kann man das mit einem Puffer behebn?? Ist der Kopiervorgang zu schnell??



  • Also ich habe eben den Code getestet und ein paar Dateien von einen Ordner in einen anderen kopiert. Es hat perfekt geklappt, es kann nur an dem Pfad liegen...

    Gruß
    :: NoName ::



  • Aber ich hab ja die 2. Datei in dem selben Ordner wie die 1. Datei!! Und die MessageBox sagt mir ja auch das die beiden Datein in dem Ordner sind und zwar alle beide?? HMM schwieriges Problem!!



  • Aber an CopyFile kann es nicht liegen. Habs genau so geschrieben und es hat funktioniert! Auch wenn die Schleife schneller ist als CopyFile() arbeitet, die Schleife wird erst weiter gehen wenn CopyFile() zu Ende ist.

    Gruß
    :: NoName ::



  • Benutze mal anstatt FindFile

    FindFirstFile.

    Hab schon was ähliches gemacht.und ich hab den Befehl benutzt.
    Und soviel ich weiss,gehört vor FindNextFile der FirstFile

    Viel Glück



  • FindFirstFile ist aber kein Objekt von CFileFind. Und mit FindNextFile arbeiten ich ja schon!! hmm



  • @ raveangel

    FindFirstFile() gehört aber nicht zu CFileFind ...

    Gruß
    :: NoName ::



  • Ach so.
    Hab ich nicht bemerkt.
    Bei mir hab ich mit nem Handle gearbeitet.
    Bei CFileFind kann ich leider nicht helfen.
    Sry



  • Also ich hab keine Ahnung warum das net klappt wenn bei NoName der selbe Code einwandfrei klappt!! Könnte man denn rein theoretisch einen Puffer einbauen?? Jetzt mal nicht die die Funktionalität mitbedacht. Vielleicht postest du mal was mit nem Puffer weil ich da keine Ahnung hab und denn probier ich das mal aus!!



  • Ich hab ne Liste erstellt.
    Passt wahrscheinlich nicht zu deinem Programm.
    Wenn du im Debugger bist,kannst du ja schaun
    was beim zweiten durchgang angezeigt wird.hast das schon gemacht?


Anmelden zum Antworten