首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

取出MP3文件的ID3v1信息,该如何处理

2012-03-12 
取出MP3文件的ID3v1信息想法是先用fseek把文件指针移动到MP3档案最后128字节处,在读出这一段数据存放到一

取出MP3文件的ID3v1信息
想法是先用fseek把文件指针移动到MP3档案最后128字节处,在读出这一段数据存放到一个DAT档中,主要代码如下:

if   (OpenDialog1-> Execute())
        {
                AnsiString   FileName1;
                FileName1   =   OpenDialog1-> FileName;//得到文件名.
                AnsiString   Ins1   =   "\\ ";
                int   Pos1   =   3;
                AnsiString   Istr   =   FileName1.Insert(Ins1,   Pos1);
               
                //   打开文件.
                pOpen   =   fopen(FileName1.c_str(),   "r ");

                //   移动文件指针到.
                fseek(pOpen,   128L,   SEEK_END);

                //   存放读出的数据.
                BYTE   *pSeek   =   NULL;
                pSeek   =   new   BYTE[128];
                memset(pSeek,   0,   128);

                //   打开一个DAT用来存放.
                FILE   *pOpen1   =   NULL;
                pOpen1   =   fopen( "G:\\1234.dat ", "wb ");
                fwrite(pSeek,   128,   1,   pOpen1);
                fclose(pOpen1);
        }

这样做得到的数据跟原MP3数据不一样了(我用UtraEdit打开看的)...请问问题出在哪里?或者有没有别的方法能从某一特定位置读出MP3等文件的一段连续数据?

然后我写了一段代码实验,直接读一个MP3档,然后再把它写入到DAT文件,用跟上面相同的方法,发现数据也有些不一样了,尤其在末尾!但是大多数MP3还是能正常播放,由于丢掉的是ID3信息所以在播放器里看不到歌手啊,专辑名等信息了....

无比郁闷...

[解决办法]
我编写过这样的小程序,获取和修改mp3的ID3v1和ID3v2
http://blog.csdn.net/Y___Y/archive/2007/02/02/1501350.aspx
[解决办法]
#include <fstream.h>
if (OpenDialog1-> Execute())
{
AnsiString FileName1;
FileName1 = OpenDialog1-> FileName;//得到文件名.
ifstream input;
input.open(FileName1.c_str(), ios::binary);
if(!input)
{
return;
}
input.seekg(0,ios::end);
int length = input.tellg();
input.seekg(length - 128);
BYTE *pSeek = NULL;
pSeek = new BYTE[128];
input.read(pSeek,128);
input.close();
ofstream output;
output.open( "c:\\1234.dat ",ios::binary);
if(!output)
{
return;
}
output.write(pSeek,128);
output.close();
}

热点排行