30
janvier
2010
Chose promise chose due
janvier
2010
Un article de Sotoaleono
Pas de commentaires
Voici les extraits de codes réalisés afin de permettre l’écriture(ajout et modification) de balise à la fin des fichiers :
////////////////////
////////////////////
////////////////////
//TAG V4
////////////////////
////////////////////
////////////////////
long Get_TAGV4_Size(long Object){
//Obtient la taille normale du fichier donc logiquement la taille du TAG
long TAGSize=0;
FILE *FileSourceGTS;
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSourceGTS=fopen(Odyssea_Media[Object].TexF,"rb");
//Verification de la présence du </ODC> obligatoire en fin de fichier
if(FileSourceGTS){
char TAGODC[10];
fseek(FileSourceGTS,-10L,SEEK_END);
fread(&TAGODC,sizeof(char),6,FileSourceGTS);
if(strncmp(TAGODC,"</ODC>",6)==0){
fread(&TAGSize,sizeof(long),1,FileSourceGTS);
//Car en fait la taille est marquée sous un long, en fin du fichier, précédé par la chaine </ODC>
}
fclose(FileSourceGTS);
return TAGSize;
}
else return -1;
}
void Delete_TAGV4(long Object)
{
long TAGSize=Get_TAGV4_Size(Object);
FILE *FileTAG;
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileTAG=fopen(Odyssea_Media[Object].TexF,"rb");
char *Temp = (char*)malloc(TAGSize);
fseek(FileTAG,0,SEEK_SET);
fread(Temp,sizeof(char),TAGSize,FileTAG);
fclose(FileTAG);
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileTAG=fopen(Odyssea_Media[Object].TexF,"wb");
fwrite(Temp,sizeof(char),TAGSize,FileTAG);
fclose(FileTAG);
}
void SetTagV4(long Object,char *Balise, char *Information)
{
Debug("SetTAGV4");
long TAGSize=Get_TAGV4_Size(Object);
char StrlenTAGSize[10];
sprintf(StrlenTAGSize,"%d",TAGSize);
FILE *FileSource;
//Présence du </ODC>
if(TAGSize>0){
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"rb");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long SizeTampon=(posend-TAGSize);
char *TempTampon = (char*)malloc(SizeTampon-10);
fseek(FileSource,TAGSize,SEEK_SET);
fread(TempTampon,sizeof(char),SizeTampon-10,FileSource);
TempTampon[SizeTampon-10]=NULL;
fclose(FileSource);
//On efface
Delete_TAGV4(Object);
char *FinalTampon = (char*)malloc(SizeTampon+strlen(Information));
long PositionBaliseHead=0;
long PositionBaliseQueue=0;
for(long i=0;i<strlen(TempTampon);i++){
char *TempBalise = (char*)malloc(strlen(Balise)+2);
char *TempBaliseRef = (char*)malloc(strlen(Balise)+2);
if(PositionBaliseHead==0){
sprintf(TempBaliseRef,"<%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseHead=i+strlen(Balise)+2;
}
if(PositionBaliseHead!=0 && PositionBaliseQueue==0){
sprintf(TempBaliseRef,"</%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseQueue=i;
}
}
long Count=0;
if(PositionBaliseHead!=0 && PositionBaliseQueue!=0){
for(long i=0;i<strlen(TempTampon);i++){
if(i<PositionBaliseHead || i>PositionBaliseQueue-1)FinalTampon[Count]=TempTampon[i],Count++;
else {
for(long j=0;j<strlen(Information);j++)FinalTampon[Count+j]=Information[j];
Count+=strlen(Information);
i=PositionBaliseQueue-1;
}
}
FinalTampon[Count]=NULL;
}
else{
char *Tampon = (char*)malloc(strlen(Information)+5+(strlen(Balise)*2));
sprintf(Tampon,"<%s>%s</%s>",Balise,Information,Balise);
strcpy(FinalTampon,TempTampon);
strcat(FinalTampon,Tampon);
Count=strlen(FinalTampon);
}
char ODCInformation[256];
sprintf(ODCInformation,"</ODC>");
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"ab");
posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long ComputeTag=posend;
fwrite(FinalTampon,sizeof(char),strlen(FinalTampon),FileSource);
fwrite(ODCInformation,sizeof(char),strlen(ODCInformation),FileSource);
fwrite(&ComputeTag,sizeof(long),1,FileSource);
}
else{
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"ab");
long ComputeTag=0;
char *Tampon = (char*)malloc(strlen(Information)+5+(strlen(Balise)*2));
sprintf(Tampon,"<%s>%s</%s>",Balise,Information,Balise);
char ODCInformation[256];
sprintf(ODCInformation,"</ODC>");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
ComputeTag=posend;
fwrite(Tampon,sizeof(char),strlen(Tampon),FileSource);
fwrite(ODCInformation,sizeof(char),strlen(ODCInformation),FileSource);
fwrite(&ComputeTag,sizeof(long),1,FileSource);
}
fclose(FileSource);
}
long GetTagV4(long Object,char *Balise, char *Dest){
long TAGSize=Get_TAGV4_Size(Object);
char StrlenTAGSize[10];
sprintf(StrlenTAGSize,"%d",TAGSize);
FILE *FileSource;
if(TAGSize>0){
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"rb");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long SizeTampon=(posend-TAGSize);
char *TempTampon = (char*)malloc(SizeTampon-10);
fseek(FileSource,TAGSize,SEEK_SET);
fread(TempTampon,sizeof(char),SizeTampon-10,FileSource);
TempTampon[SizeTampon-10]=NULL;
fclose(FileSource);
long PositionBaliseHead=0;
long PositionBaliseQueue=0;
for(long i=0;i<strlen(TempTampon);i++){
char *TempBalise = (char*)malloc(strlen(Balise)+2);
char *TempBaliseRef = (char*)malloc(strlen(Balise)+2);
if(PositionBaliseHead==0){
sprintf(TempBaliseRef,"<%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseHead=i+strlen(Balise)+2;
}
if(PositionBaliseHead!=0 && PositionBaliseQueue==0){
sprintf(TempBaliseRef,"</%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseQueue=i;
}
}
char *TDest=(char*)malloc(PositionBaliseQueue-PositionBaliseHead);
for(long i=PositionBaliseHead;i<PositionBaliseQueue;i++)TDest[i-PositionBaliseHead]=TempTampon[i];
TDest[PositionBaliseQueue-PositionBaliseHead]=NULL;
strcpy(Dest,TDest);
return TRUE;
}
return FALSE;
}
////////////////////
////////////////////
//TAG V4
////////////////////
////////////////////
////////////////////
long Get_TAGV4_Size(long Object){
//Obtient la taille normale du fichier donc logiquement la taille du TAG
long TAGSize=0;
FILE *FileSourceGTS;
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSourceGTS=fopen(Odyssea_Media[Object].TexF,"rb");
//Verification de la présence du </ODC> obligatoire en fin de fichier
if(FileSourceGTS){
char TAGODC[10];
fseek(FileSourceGTS,-10L,SEEK_END);
fread(&TAGODC,sizeof(char),6,FileSourceGTS);
if(strncmp(TAGODC,"</ODC>",6)==0){
fread(&TAGSize,sizeof(long),1,FileSourceGTS);
//Car en fait la taille est marquée sous un long, en fin du fichier, précédé par la chaine </ODC>
}
fclose(FileSourceGTS);
return TAGSize;
}
else return -1;
}
void Delete_TAGV4(long Object)
{
long TAGSize=Get_TAGV4_Size(Object);
FILE *FileTAG;
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileTAG=fopen(Odyssea_Media[Object].TexF,"rb");
char *Temp = (char*)malloc(TAGSize);
fseek(FileTAG,0,SEEK_SET);
fread(Temp,sizeof(char),TAGSize,FileTAG);
fclose(FileTAG);
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileTAG=fopen(Odyssea_Media[Object].TexF,"wb");
fwrite(Temp,sizeof(char),TAGSize,FileTAG);
fclose(FileTAG);
}
void SetTagV4(long Object,char *Balise, char *Information)
{
Debug("SetTAGV4");
long TAGSize=Get_TAGV4_Size(Object);
char StrlenTAGSize[10];
sprintf(StrlenTAGSize,"%d",TAGSize);
FILE *FileSource;
//Présence du </ODC>
if(TAGSize>0){
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"rb");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long SizeTampon=(posend-TAGSize);
char *TempTampon = (char*)malloc(SizeTampon-10);
fseek(FileSource,TAGSize,SEEK_SET);
fread(TempTampon,sizeof(char),SizeTampon-10,FileSource);
TempTampon[SizeTampon-10]=NULL;
fclose(FileSource);
//On efface
Delete_TAGV4(Object);
char *FinalTampon = (char*)malloc(SizeTampon+strlen(Information));
long PositionBaliseHead=0;
long PositionBaliseQueue=0;
for(long i=0;i<strlen(TempTampon);i++){
char *TempBalise = (char*)malloc(strlen(Balise)+2);
char *TempBaliseRef = (char*)malloc(strlen(Balise)+2);
if(PositionBaliseHead==0){
sprintf(TempBaliseRef,"<%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseHead=i+strlen(Balise)+2;
}
if(PositionBaliseHead!=0 && PositionBaliseQueue==0){
sprintf(TempBaliseRef,"</%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseQueue=i;
}
}
long Count=0;
if(PositionBaliseHead!=0 && PositionBaliseQueue!=0){
for(long i=0;i<strlen(TempTampon);i++){
if(i<PositionBaliseHead || i>PositionBaliseQueue-1)FinalTampon[Count]=TempTampon[i],Count++;
else {
for(long j=0;j<strlen(Information);j++)FinalTampon[Count+j]=Information[j];
Count+=strlen(Information);
i=PositionBaliseQueue-1;
}
}
FinalTampon[Count]=NULL;
}
else{
char *Tampon = (char*)malloc(strlen(Information)+5+(strlen(Balise)*2));
sprintf(Tampon,"<%s>%s</%s>",Balise,Information,Balise);
strcpy(FinalTampon,TempTampon);
strcat(FinalTampon,Tampon);
Count=strlen(FinalTampon);
}
char ODCInformation[256];
sprintf(ODCInformation,"</ODC>");
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"ab");
posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long ComputeTag=posend;
fwrite(FinalTampon,sizeof(char),strlen(FinalTampon),FileSource);
fwrite(ODCInformation,sizeof(char),strlen(ODCInformation),FileSource);
fwrite(&ComputeTag,sizeof(long),1,FileSource);
}
else{
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"ab");
long ComputeTag=0;
char *Tampon = (char*)malloc(strlen(Information)+5+(strlen(Balise)*2));
sprintf(Tampon,"<%s>%s</%s>",Balise,Information,Balise);
char ODCInformation[256];
sprintf(ODCInformation,"</ODC>");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
ComputeTag=posend;
fwrite(Tampon,sizeof(char),strlen(Tampon),FileSource);
fwrite(ODCInformation,sizeof(char),strlen(ODCInformation),FileSource);
fwrite(&ComputeTag,sizeof(long),1,FileSource);
}
fclose(FileSource);
}
long GetTagV4(long Object,char *Balise, char *Dest){
long TAGSize=Get_TAGV4_Size(Object);
char StrlenTAGSize[10];
sprintf(StrlenTAGSize,"%d",TAGSize);
FILE *FileSource;
if(TAGSize>0){
if(Odyssea_Media[Object].Type==OSERIE || Odyssea_Media[Object].Type==OMOVIE || Odyssea_Media[Object].Type==OVIDEO)FileSource=fopen(Odyssea_Media[Object].TexF,"rb");
fpos_t posend = 0;
fseek(FileSource,0,SEEK_END);
fgetpos(FileSource, &posend);
long SizeTampon=(posend-TAGSize);
char *TempTampon = (char*)malloc(SizeTampon-10);
fseek(FileSource,TAGSize,SEEK_SET);
fread(TempTampon,sizeof(char),SizeTampon-10,FileSource);
TempTampon[SizeTampon-10]=NULL;
fclose(FileSource);
long PositionBaliseHead=0;
long PositionBaliseQueue=0;
for(long i=0;i<strlen(TempTampon);i++){
char *TempBalise = (char*)malloc(strlen(Balise)+2);
char *TempBaliseRef = (char*)malloc(strlen(Balise)+2);
if(PositionBaliseHead==0){
sprintf(TempBaliseRef,"<%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseHead=i+strlen(Balise)+2;
}
if(PositionBaliseHead!=0 && PositionBaliseQueue==0){
sprintf(TempBaliseRef,"</%s>",Balise);
for(long j=0;j<strlen(TempBaliseRef);j++)TempBalise[j]=TempTampon[i+j];
if(strncmp(TempBalise,TempBaliseRef,strlen(TempBaliseRef))==0)PositionBaliseQueue=i;
}
}
char *TDest=(char*)malloc(PositionBaliseQueue-PositionBaliseHead);
for(long i=PositionBaliseHead;i<PositionBaliseQueue;i++)TDest[i-PositionBaliseHead]=TempTampon[i];
TDest[PositionBaliseQueue-PositionBaliseHead]=NULL;
strcpy(Dest,TDest);
return TRUE;
}
return FALSE;
}
Deux jours de travail….Trois fois rien!!!!