> Er der er en speciel opening mode der gør at man starter med sin pointer
> sidst i filen?? Eller er det nødvendigt at kende filstørrelsen og så
flytte
> pointeren fra starten af filen?? Eller hvordan??
Her noget kode du kan kigge på. Jeg vil ikke anbefale dig at bruge det, for
det "sutter" mange steder:
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
struct ID3Tag
{
char songtitle [31];
char artist [31];
char album [31];
char year [5];
char comment [31];
unsigned char genre;
};
int main(int argc, char* argv[])
{
char tag [3];
ID3Tag *id3tag = NULL;
long br;
FILE *fil = fopen ("d:\\12-shania_twain-ka_ching-wax.mp3", "rb" );
if (fil == NULL)
{
printf ("Open Error!\n");
}
else
{
fseek ( fil, -128, SEEK_END );
fread ( &tag, 1, 3, fil );
if ((tag [0] == 'T') && (tag [1] == 'A') && (tag [2] == 'G'))
{
id3tag = new ID3Tag;
br = fread ( &id3tag->songtitle, 1, 30, fil );
br += fread ( &id3tag->artist, 1, 30, fil );
br += fread ( &id3tag->album, 1, 30, fil );
br += fread ( &id3tag->year, 1, 4, fil );
br += fread ( &id3tag->comment, 1, 30, fil );
br += fread ( &id3tag->genre, 1, 1, fil );
if (br != 125)
{
printf ("Read Error!\n");
delete id3tag;
id3tag = NULL;
}
else
{
// sikring af at strenge er afsluttet med terminating zero
id3tag->songtitle [30] = 0;
id3tag->artist [30] = 0;
id3tag->album [30] = 0;
id3tag->year [4] = 0; /* denne her f.eks. normalvis aldrig afsluttet
med 0 */
id3tag->comment [30] = 0;
};
}
else
{
printf ("No Id3tag found!\n");
};
fclose (fil);
};
if (id3tag)
{
printf ("Id3Tag:\n\n");
printf ("Title : \"%s\"\n", id3tag->songtitle);
printf ("Artist : \"%s\"\n", id3tag->artist);
printf ("Album : \"%s\"\n", id3tag->album);
printf ("Year : \"%s\"\n", id3tag->year);
printf ("Comment : \"%s\"\n", id3tag->comment);
printf ("Genre : %d\n", id3tag->genre);
};
delete id3tag;
return 0;
}
|