| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Проблема с чтением из файла MP3 тегов |
| Автор: Shushide 28.5.2005, 23:43 |
| Ребята, кто может помочь в решении моей проблемы? Вкратце, суть задачи в том, чтобы прочитать теги из MP3-файла и вывести каждый в свое текстовое поле на форме. Вот код: __fastcall FillID3TagInformation(String mp3File) { struct TID3Rec { char Tag[3],Title[30],Artist[30],Comment[30],Album[30],Year[4]; char Genre; } myStruct; TID3Rec* ptr = &myStruct; TFileStream *fmp3 = new TFileStream(mp3File, fmOpenRead); fmp3->Position = fmp3->Size - 128; fmp3->Read(ptr,128); fmp3->Free(); Form1->Tag->Text = myStruct.Tag; Form1->Title->Text = myStruct.Title; Form1->Artist->Text = myStruct.Artist; Form1->Comment->Text = myStruct.Comment; Form1->Album->Text = myStruct.Album; Form1->Year->Text = myStruct.Year; Form1->Genre->Text = myStruct.Genre; return 0; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String n; if ( (OpenDialog1->Execute()) && (OpenDialog1->FileName != "") ) n = OpenDialog1->FileName; FillID3TagInformation(n); } По задумке должно получаться, что в каждую переменную структуры записывается свой тег, а затем извлекается. Однако, при отладке,при наводе курсором на имя структуры показывается, что все переменные заполненными корректно. А при наводе на,например, myStruct.Tag в переменной Таg оказываются все 128 символов, и такая же лабуда, с небольшими оговорками, с осталными.. :-((( Ну и в поля выводится соответственно не то, что требуется, а гораздо больше. Почему так получается? Где я ошибся? |
| Автор: _hunter 30.5.2005, 11:23 |
| скорее всего с выравниванием проблемы -- поставь в 1 байт |
| Автор: Mayk 30.5.2005, 15:43 | ||
Наводит на мысль - может теги не содержат завершающий \0? Тогда SetLength/strncpy в помощь. |