ďťż

Ładny brzuch

Witam!

Może mi ktoś powiedzieć dlaczego ten kod nie działa tak jak powinien ?? W czym problem ?? Otóż zauważyłem ze podczas odczytu do roku jet dopisywany również komentarz. Na niektórych plikach mp3 zdarzyło się też że wszystkie dane były zapisywane w jeden rekord np.Title. Miałem taki kod napisany w Delphi i nie odnotowałem żadnych takich nieprawidłowości. Proszę o pomoc. Używam kompilatora "Borland Developer Studio 2006";

//Struktura struct TAGClass { char Tag[3]; char Title[30]; char Artist[30]; char Album[30]; char Year[4]; char Comment[29]; Byte Numer; Byte Genre; }; //odczyt tagu z mp3 { TAGClass ID3; if (od->Execute()) { TFileStream *mp3File = new TFileStream(od->FileName,fmOpenRead); mp3File->Position = mp3File->Size - 128; mp3File->Read(&ID3,128); Edit1->Text = ID3.Title; Edit2->Text = ID3.Artist; Edit3->Text = ID3.Album; Edit4->Text = ID3.Year; Edit5->Text = ID3.Comment; Edit6->Text = IntToStr(ID3.Numer); Edit7->Text = IntToStr(ID3.Genre); delete mp3File; } }



Problem polega na tym, że pobierając tekst ze struktury (np. "Edit4->Text = ID3.Year;") program czyta tak długo, aż napotka koniec stringa (czyli NULL), którego tam nie ma. W "Year" masz zapisane 4 znaki np. "2008". Musisz je inaczej przypisać do edita (np. pętlą).

Komentarz również powinien być 30 znakowy (usuń Numer), choć nie będzie to miało większego wpływu na działanie kodu.

http://www.mpx.cz/mp3manager/tags.htm

Zawsze możesz skorzysta z gotowej biblioteki, która czyta i zapisuje tagi.

http://id3lib.sourceforge.net/
http://id3lib.source.../api/index.html
Użytkownik Kozack edytował ten post 27 sierpień 2008, 15:21
Dobry pomysł z biblioteką ;) a dla tych którzy nei cche jej stosować znalazłem taki oto sposób:

{ Edit1->Clear(); Edit2->Clear(); Edit3->Clear(); Edit4->Clear(); Edit5->Clear(); Edit6->Clear(); TAGStruct ID3; if (od->Execute()) { TFileStream *FileStream = new TFileStream(od->FileName,fmOpenRead); FileStream->Position = FileStream->Size - 128; FileStream->Read(&ID3,sizeof(ID3)); delete FileStream; } for (int i=0; i < 3; i++) Edit1->SelText = ID3.tag[i]; for (int i=0; i < 30; i++) Edit2->SelText = ID3.title[i]; for (int i=0; i < 30; i++) Edit3->SelText = ID3.artist[i]; for (int i=0; i < 30; i++) Edit4->SelText = ID3.album[i]; for (int i=0; i < 4; i++) Edit5->SelText = ID3.year[i]; for (int i=0; i < 29; i++) Edit6->Text = ID3.comment[i]; Edit7->Text = IntToStr(ID3.nr); Edit8->Text = IntToStr(ID3.genre); }

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •