int Id3v2Tag::WriteTextToMp3(int id,char *pText)
{
FRAMELIST *node =(FRAMELIST *) malloc(sizeof(FRAMELIST)) ;
memset(node,0,sizeof(FRAMELIST));
node->frameID = id;
strncpy(node->frame.FrameID,id3v2Label[id],4);
char *newcontent = (char *)malloc(strlen(pText)+2);
if(newcontent == NULL)return -1;
newcontent[0]=0;
strncpy(newcontent+1,pText,strlen(pText));
node->frameSize = strlen(pText)+1;
CalceFrameSize(strlen(pText)+1,node->frame.Size);
node->content=newcontent;
int flag=0;
FRAMELIST *pTemp = NULL;
if(m_pFrameList == NULL)//没有结点
{
memset(&m_stHeader,0,sizeof(m_stHeader));
strncpy(m_stHeader.Header,"ID3",3);
m_stHeader.Ver = 04;
m_headerSize=0;
}
else
{
m_pTemp=m_pFrameList;
while(m_pTemp != NULL)
{
if(m_pTemp->frameID == id)
{
flag = 1;
break;
}
pTemp=m_pTemp;
m_pTemp=m_pTemp->pNext;
}
}
if(flag == 1)
{
node->pNext=m_pTemp->pNext;
pTemp->pNext = node;
free(m_pTemp->content);
free(m_pTemp);
}
else
{
if(m_pFrameList == NULL)
{
m_pFrameList=node;
}
else
{
node->pNext=m_pFrameList;
m_pFrameList=node;
}
}
FILE *oldfp,*newfp;
oldfp = fopen(m_pFileName,"rb");
fseek(oldfp,0L,SEEK_END);
int oldfilelen=ftell(oldfp);
fseek(oldfp,m_headerSize,SEEK_SET);
char *oldfile = (char *)malloc(oldfilelen-m_headerSize);
fread(oldfile,oldfilelen-m_headerSize,1,oldfp);
fclose(oldfp);
int headlen=0;
pTemp = m_pFrameList;
while(pTemp != NULL)
{
headlen+=10;
headlen+=pTemp->frameSize;
pTemp = pTemp->pNext;
}
CalcHeadSize(headlen,m_stHeader.Size);
newfp = fopen("aaa.mp3","wb");
fwrite(&m_stHeader,sizeof(m_stHeader),1,newfp);
pTemp = m_pFrameList;
while(pTemp != NULL)
{
fwrite(&pTemp->frame,sizeof(FRAME),1,newfp);
fwrite(pTemp->content,pTemp->frameSize,1,newfp);
pTemp= pTemp->pNext;
}
fwrite(oldfile,oldfilelen-m_headerSize,1,newfp);
fclose(newfp);
// remove(m_pFileName);
// rename("aaa.mp3",m_pFileName);
free(oldfile);
}