problem bei einem programm zum umbenennen von dateien...



  • Hallo,

    ich habe ein Problem mit einem Programm. Das Programm soll in einem Verzeichniss die Dateien und ihren Dateinamen auslesen , danach wird aus einer Textdatei eine Zeile ausgelesen und aus dem alten Dateiname und der Zeile ein neuer Name generiert. Die Datei soll dann in diesen neuen Namen umbenannt werden und das ganze soll für alle Dateien passieren (hier: ogg-files).

    Mein Code funktioniert eigentlich, nur das er jeweils nur die erste DAtei umbenennt und dann ausgibt das beim Umbenennen fehler auftreten...

    ?

    Ich hab schon gekuckt ob ich vielleicht ungültige Zeichen verwende, etc. Alles ohne erfolg.

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <stdio.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        //Filehandling
        HANDLE fHandle;
        WIN32_FIND_DATA wfd;
    
        int zeilenid = 93;
    
        //EINLESEN DER DATEIEN
        //Erste Datei "."
        fHandle=FindFirstFile("*",&wfd);
        //Zweite Datei ".."
        FindNextFile(fHandle,&wfd);
    
        while (FindNextFile(fHandle,&wfd))
              {
                  if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
                      //Tue nichts bei Unterverzeichniss
                  }
    
                  else {
                  //Durchsuchen nach ogg-Files
                  string alt = wfd.cFileName;
    
                  if (alt.substr(alt.length()-3, alt.length())=="ogg") {  
    
                  //Generieren des neuen Dateinamens
                  string index = alt.substr(10, 3);
                  string datum = alt.substr(15, 10);
    
                  //Ließt die Zeilen aus um den Rest des Dateinamens zu generieren
                  char zeile[200];
                  unsigned int aktuellezeile = 1;
    
                  FILE *in;
                  in = fopen( "busch.bf2", "r");
    
                           while (aktuellezeile!=zeilenid) {
    
                                 fgets( zeile, 200, in);
                                 aktuellezeile++;
                           }
                  zeilenid -= 1;
                  //---------------------------------------------------------------
    
                  //Umwandlung
                  char zeileneu[200];
                  for (unsigned int i=13; i<=200; i++) {
                  zeileneu[i-13]=zeile[i];
                  }
                   string titel = zeileneu;
                   string neuername = index + " - " +datum + " - " + titel + ".ogg";
    
                   //Umwandlung (zuerst dateinamen in char-arrays, dann umbenennung
                   char neu[200];
                   for (unsigned int i = 0; i <=neuername.length(); i++) {
    
                        if (neuername.substr(i, 1)=="/"||neuername.substr(i, 1)=="\ "
                        ||neuername.substr(i, 1)=="*"||neuername.substr(i, 1)=="?"
                        ||neuername.substr(i, 1)==" "||neuername.substr(i, 1)==":") 
                        {
                          neu[i]=' ';
                        } 
                        else { 
    
                            if (neuername.substr(i, 1)=="[") {
                            neu[i] = '(';
                            } 
                            else {
                                   if (neuername.substr(i, 1)=="]") {
                                   neu[i] = ')'; }
                                          else { neu[i] = neuername[i];}
                            }
                   }
                }
                   char alter[200];
                   for (unsigned int i = 0; i <=alt.length(); i++) {
    
                       alter[i] = alt[i];
                   }
    
                   //EIGENTLICHE UMBENENNUNG
                   int x = rename(alter, neu);     
    
                  } //IF dateiendung ist ogg
              } //else
              } //WHILE findnextfile
    
        FindClose(fHandle);
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Bitte helft mir. Ich glaube der Fehler muss irgendwie mit dem rename befehl zusammenhängen... 😕



  • Hab mir das jetzt nicht durchgesehen, aber warum verwendest Du nicht einfach rename(1)?



  • 😃 hätt'ste ma besser...

    Nee, hab schon rename genommen. das problem liegt ...



  • HILFE!!! ich probier jetzt schon ewig rum...ich find einfach mein fehler nicht.
    kann mir bitte bitte bitte mal jemand einen tipp geben. ich verzweifle.

    das problem ist das der rename befehl beim erstenmal richtig funktioniert und danach nicht mehr...

    ich habs mit allem möglichen probiert (zb. rename aus getrennten methoden aufzurufen etc.) aber ES GEHT EINFACH NET 😞


Anmelden zum Antworten