/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Læse slutningen af en fil
Fra : Søren \"Pengman\" Pe~


Dato : 12-06-03 00:20

Hej folkens

I et projekt jeg er igang med har jeg behov for at læse de sidste 128 bites
af en fil (ID3-tagget i en mp3-fil)
Hvordan gøres dette??

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??

På forhånd tak
Søren





 
 
Klaus Petersen (12-06-2003)
Kommentar
Fra : Klaus Petersen


Dato : 12-06-03 08:43

> 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;
}



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste