Dateinamen einlesen und bestimmte Zeichen ersetzen



  • Hi, ich möchte ein Programm schreiben, das in allen Dateinamen eines bestimmten Verzeichnisses ein bestimmtes Zeichen ändert. Also, z.B. hab ich die Dateien
    Hans,Peter.dat
    Hubert,Schmitt.zip

    dann sollen diese in
    Hans-Peter.dat
    Hubert-Schmitt.zip

    umgewandelt werden.
    Wie muss ich da vorgehen?
    Zu erst muss doch ein Dateiname eingelesen und in nem string gespeichert werden.
    Danach muss der string durchsucht werden ob das zu ersetzende Zeichen vorhanden ist, und es gegebenfalls ersetzen. Und zu letzt muss der alte Dateiname vom neuen überschrieben werden. Danach das ganze mit der nächsten Datei.
    Oder?



  • Schau mal in der FAQ.
    Da gibts einen Beitrag der Beschreibt wie man ein Verzeichnis (und Unterverzeichnisse)
    durchsucht, CFileFind liefert dir auch den Namen der Datei.
    Wie du ihn änderst, hm, also rein theoretisch könnte man es so machen das man
    die Datei mit CStdioFile öffnet, und sie dann neu abspeichert und die alte Löscht,
    aber das muss auch einfacher gehen, such mal in der MSDN gibt bestimmt eine Funktion dafür...
    Zeichenersetzen geht mit CString::Replace();
    Du solltest aber net den '.' ersetzen 😉

    Devil

    [ Dieser Beitrag wurde am 29.01.2003 um 14:47 Uhr von devil81 editiert. ]



  • uhm?

    int rename( const char *oldname, const char *newname );
    

    Einfach mit nem .tmp File arbeiten oder so (obwohl du das ja nicht brauchst bei den änderungen):

    Entweder hast Du den Dateinamen halt schon oder du liest ihn mit FindFirstFile ein.

    [ Dieser Beitrag wurde am 29.01.2003 um 14:51 Uhr von Frenzy editiert. ]



  • ich hab das jetzt schon soweit, das ich die dateinamen einles und sie in nem char array (255 Zeichen) speicher. Das mit den zeichenersetzen hab ich in ner for-Schleife gemacht.
    Was mir jetzt noch fehlt ist, wie ich den namen änder. Die funktion rename bwirkt irgendwie nix.



  • Original erstellt von TheDeath:
    ich hab das jetzt schon soweit, das ich die dateinamen einles und sie in nem char array (255 Zeichen) speicher. Das mit den zeichenersetzen hab ich in ner for-Schleife gemacht.
    Was mir jetzt noch fehlt ist, wie ich den namen änder. Die funktion rename bwirkt irgendwie nix.

    Du mußt auch den absoluten Pfad angeben, also

    "c:\\Programme\\App\\Filname.txt"

    oder mit _chdir vorher das verzeichnis wechseln.

    Als standard sucht er sonst im Windows Verzeichnis meine ich.

    [ Dieser Beitrag wurde am 29.01.2003 um 15:43 Uhr von Frenzy editiert. ]



  • MoveFile könnte auch gehen.



  • So, das problem hab ich auch gelöst. ich hol mit mit GetRoot() das verzeichniss der dateien, häng da den neuen dateinamen dran und übergeb das dann der funktion CFile::Rename. Klappt auch wunderbar.
    Nur hab ich jetzt das problem, das ich nich weis wie ich eine Variable vom Typ CString in Char konvertieren kann, mit sprintf kommt immer die fehlermeldung:
    error C2664: 'sprintf' : Konvertierung des Parameters 1 von 'char' in 'char *' nicht moeglich



  • Ich denke mal das du char* meinst und nicht char, oder?
    In ein char*:

    char* pstr = new char[255];
    
    strcpy(pstr, str.GetBuffer(str.GetLength()));  
    str.ReleaseBuffer();
    

    wenn du nun aber wirklich einen char willst, dann vielleicht so:

    sprintf(pstr,"%c",str.GetAt(0));
    

    Aber keine Garantie.



  • Um genau zu sein will ich das machen:

    name[13] = m_add;

    wobei die Variable m_add vom typ CString ist.

    [ Dieser Beitrag wurde am 29.01.2003 um 17:28 Uhr von TheDeath editiert. ]


Anmelden zum Antworten