Ordner und Dateien kopieren und umbenenen



  • Hallo Freunde,
    Ich bin mal wieder auf eure Hilfe angewiesen...
    Erst einmal zu der Aufgabe:
    Mein Programm soll als erstes in einem Ordner einen Unterordner(z.b.:ordner) mit seinem gesamten Inhalt(z.b.: datei_a, datei_b.....) verdoppeln so das in dem Ordner ein zweiter Unterordner (z.B.:ordner_1) mit dem gleichen Inhalt wie in ordner1 existiert.
    Dann sollen alle Dateien in ordner1 umbenannt werden(z.b.: datei_a1, datei_b1.....)

    Der folgende Code sollte erstmal den Ordner kopieren! Tut er aber nicht und es gibt auch keine Fehlermeldung...

    hier der Codeabschnitt:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <windows.h>
    
    #include "myheader.h"
    
    using namespace std;
    
    int main()
    {
    	string ordnerneu;
    	string ordner = "D:\tmp\ordner";
    	for (int i=0; i<5; i++){
    		ordnerneu=ordner;
    		ordnerneu.insert(6,i);
    		LPCWSTR src = (wchar_t*) ordner.c_str();
    		LPCWSTR src1 = (wchar_t*) ordnerneu.c_str();
    
    		MoveFile(ordner.c_str(),ordnerneu.c_str());
    /*hier muss die schleife hin die die dateien umbenennt*/
    }
    }
    

    damit das geht muss bei den Projekteigenschaften der Zeichensatz von unicode auf multibyte umgestellt werden...



  • Das erste Problem bestand in der Pfadangabe: mit / statt \ geht es.
    Jetzt wird der ordner aber nur umbenannt!
    die Funktion "CopyFile" statt "MoveFile" scheint auch nicht zu gehen...



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • SHFileOperation.

    PS: Und eine Fehlermeldung gibt MoveFile sicherlich zurück!



  • Hi, also was mir als erstes auffällt: dieser Cast in w_char_t* ist unnötig ! Verwende doch wstring statt string für die Pfade !
    Also entweder diese Vorgehensweise und Unicode oder Multibyte, dann aber LPCTSTR verwenden und diesen Cast von dir weglassen !

    Und mich wundert es, dass es keinen Compiler-Fehler gibt für

    string ordner = "D:\tmp\ordner";
    

    Es sollten da eig. je 2 Backslashes stehen ! Sonst wird es als Escape-Sequenz interpretiert.
    Außerdem solltest du vielleicht mal die Rückgabe von MoveFile auswerten ! Dann kannst du erkennen, ob es einen Fehler gab und wenn ja, welchen.

    €: Oh, da war wohl jemand schneller... 🙂



  • Hallo,

    R3dNeXX schrieb:

    Und mich wundert es, dass es keinen Compiler-Fehler gibt für

    string ordner = "D:\tmp\ordner";
    

    Nein, nicht unbedingt, '\t' ist eine bekannte Escape-Sequenz, und das andere kann auch interpretiert werden, je nach Compiler:

    Microsoft Specific

    If a backslash precedes a character that does not appear in the table, the compiler handles the undefined character as the character itself. For example, \c is treated as an c.

    END Microsoft Specific

    MfG,

    Probe-Nutzer



  • Ah ok, hab ich jetzt zum 1. Mal gehört ! Danke für die Aufklärung. 👍


Anmelden zum Antworten