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...