#include <windows.h>
#include <iostream.h>
#include <conio.h>
struct
{
char head[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[29];
char track;
char genre[1];
} tag;
bool GetTag(char *filename)
{
FILE *in;
int i;
char *ptr,*dptr;
char tmp[5];
if( (in=fopen(filename,"rb"))==NULL)
{
cout << "File " << filename << " Not found" << endl;
return false;
}
if (fseek(in, -128L, SEEK_END))
{
fclose(in);
cout << "Error: Can't seek ID3TAG label\n" << endl;
return false;
}
if(!fread((char *)&tag,sizeof(tag),1,in))
{
fclose(in);
cout << "Error: Can't Read ID3TAG header\n" << endl;
return false;
}
if( (strncmp("TAG",tag.head,3))!=NULL)
{
cout << "Error: Incorect Tag header or not Mp3 file\n" << endl;
return false;
}
fclose(in);
delete in,i,ptr,dptr;
}
//----------------------------------------------------
main(int argc, char* argv[])
{
char _head[3];
char _title[30];
char _artist[30];
char _album[30];
char _year[4];
char _comment[29];
char _genre[1];
ZeroMemory(&tag,sizeof(tag));
GetTag("C:\\Cvetut_cvety.mp3");
CharToOem(tag.head,_head);
CharToOem(tag.title,_title);
CharToOem(tag.artist,_artist);
CharToOem(tag.album,_album);
CharToOem(tag.year,_year);
CharToOem(tag.comment,_comment);
CharToOem(tag.genre,_genre);
cout<<"Head - "<<_head<<endl;
cout<<"Title - "<<_title<<endl;
cout<<"Artist - "<<_artist<<endl;
cout<<"Album - "<<_album<<endl;
cout<<"Year - "<<_year<<endl;
cout<<"Comment - "<<_comment<<endl;
cout<<"Track - "<<tag.track<<endl;
cout<<"Genre - "<<_genre<<endl;
return 0;
};
Выдираем Тег из mp3
Помогите почему билдер выводит сообщение об ошибке процессора и доступа к памяти
fseek(in, -128L, SEEK_END)
а потом вычитываешь sizeof(tag) байт из него
fread((char *)&tag,sizeof(tag),1,in))
Ты уверен, что sizeof(tag) == 128 ?
И еще вопрос: зачем ты, имея структуру, создаешь отдельно ещё и char _head[3], char _title[30] и т.д. ?
Неужели нельзя просто создать еще один экземпляр структуры?
Кроме того нет смысла использовать глобальный объект tag, тем более, раз уж ты создаешь отдельный метод для считывания тэга.
И ещё один вопрос: ты специально пишешь на C, а не на С++?
ДА я не спец! только учусь! А код не мой! Я только проверил работает ли он! Да и не особо разбирался!
Цитата:
Originally posted by kas
ДА я не спец! только учусь! А код не мой! Я только проверил работает ли он! Да и не особо разбирался!
ДА я не спец! только учусь! А код не мой! Я только проверил работает ли он! Да и не особо разбирался!
Ну может подправив эти ошибки, все остальное всплывет на поверхность?