komische sache das... for()



  • also ich hab mal was getippelt das mir meine mp3 sammlung namensmäßig in ordnung bringen soll. das funzt auch schon soweit ganz gut aber wenn ich nun eine liste (von borland TStringList) eingelesen habe und diese vom 1. eintrag (Index 0) bis zum letzten ( bei 30 einträgen Index 29) durgehen will, vergisst mein for(...;...;...) immer die letzten paar einträge (bei 42 eingelesenen waren es 4 und bei 32 eingelesenen waren es 2 😕

    aber hier erstmal der code:

    String OLD;
    String NEW;
    for(int y=0;y<FList->Count;y++) //FList ist meine Stringlist und Count gibt die Anzahl der Einträge wieder
     {
      OLD=FList->Strings[y];    //y gibt hier den Index an von dem der String gelesen werden soll
    
      dat=fopen(FList->Strings[y].c_str(),"r"); //nächste Datei öffnen
      fseek(dat,-125,SEEK_END);	//Streamzeiger 125bytes vor Dateiende Setzen
    
      fread(ID3.TITEL,30,1,dat);     //Titel einlesen
      fread(ID3.INTERPRET,30,1,dat); //Interpret einlesen
      fread(ID3.ALBUM,30,1,dat);     //Albumnamen einlesen
      fclose(dat);
      NEW=ExtractFilePath(FList->Strings[y])+ ID3.INTERPRET+" - "+ID3.TITEL+".mp3"; //Neuen Namen Kombinieren
      RenameFile(OLD,NEW);           //Umbenennen
     }
    

    ach ja : ich weis das da C und C++ zusammen gehaun sind aber leider ließ sich die position im Stream mit

    C++

    seekg(-125,ios_base::end)
    

    absolut nicht festlegen....

    soa, was läuft falsch? WARUM vergisst das tool immer ein paar einträge der stringlist?????



  • Hallo

    auf den ersten Blick kann ich keinen Grund finden, warum nicht alle Einträge bearbetet werden. Du mußt mal debuggen
    - setzt einen Breakpoint ganz oben und lauf alle Einzelschritte durch, las dir dabei die aktuellen Werte der Variablen anzeigen
    - bau eine zusätzliche StringList zum Loggen ein, in die du die verwendeten Dateinamen (Quelle und Ziel) schreibst, und speicherer diese zum Überprüfen nach dem Durchlauf in einer extra Datei
    - Überprüf die Rückgabewerte der Dateifunktionen auf Fehlercodes.

    bis bald
    akari



  • THX, gesagt->getan->funzt->neues problem

    lässt sich nur schlecht erklären, am besten mal selbst gucken habs HIER abgelegt und sie source .cpp vom main dazu gepackt. mein prob ist das ich zwar

    struct                  //Struckt für Tag-infos basteln
    {
    char  ID[3];
    char  TITEL[30];
    char  INTERPRET[30];
    char  ALBUM[30];
    }ID3;
    
    .....
    
    dat=fopen(FList->Strings[ListBox1->ItemIndex].c_str(),"r"); //Angeklickte Datei öffnen
     fseek(dat,-125,SEEK_END);	//Streamzeiger 125bytes vor Dateiende Setzen
    
     fread(ID3.TITEL,30,1,dat);     //Titel einlesen
      TITEL->Caption=ID3.TITEL;      //Ausgabe Titel
     fread(ID3.INTERPRET,30,1,dat); //Interpret einlesen
      INTERPRET->Caption=ID3.INTERPRET;  //Ausgabe Interpret
     fread(ID3.ALBUM,30,1,dat);     //Albumnamen einlesen
      ALBUM->Caption=ID3.ALBUM;          //Ausgabe Albumname
     fclose(dat);  //Dateistream schließen
    

    mit char[30] deklariere und auch nur 30 zeichen aus dem stream mopse, aber dennoch beim label "Titel" mehr als 30 zeichen ausgegeben werden...
    einfach mal das prog starten , mp3`s laden mir rechtsklick auf die listbox und mal doppelt auf ein file klicken. das unheil zeigt sich nicht bei jedem file ... komischer weise! 😕

    bin wieder mal ratlos 😞



  • Ich kenn die ID3 Formate nicht aber ich schätze, die Strings müssen noch nullterminiert werden. also char CAPTION[31], 30 Zeichen lesen, und dann CAPTION[30] = 0.



  • Abgesehen davon läuft es bei mir einwandfrei.



  • THX, das wars ^^ man, hundert mal hat mans schon gelesen und wenn mans mal braucht...

    🙄 😃


Anmelden zum Antworten