Claus Jørgensen wrote:
> Hej
>
>
>
> Er der nogen som har et link på en hjemmeside som beskriver, hvordan man
> læser en fil i C++, som ikke er en alm. tekst-fil (fx en mp3 fil)? De fleste
> hjemmesider jeg har fundet beskriver ikke, hvad man kan gøre, hvis man gerne
> vil læse en fil, som et andet program har lavet.
>
Man burde kunne bruge noget i stil med følgende.
Hvis ikke filen har en tag vil det tilføje en,
ellers udskriver den tag'en.
Jeg har hentet det meste information om tag'en her:
http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::fstream File;
File.open("D:\\test.mp3", std::ios::binary | std::ios::in |
std::ios::out);
if(!File.is_open())
{
std::cerr << "Failed to open File" << std::endl;
return 0;
}
File.seekg(-128, std::ios::end);
char Tag[4];
Tag[3] = 0;
File.read(Tag, 3);
if(!strcmp(Tag, "TAG"))
{ // The file contains a tag, read it
char Buf[31];
Buf[30] = 0;
File.read(Buf, 30);
std::cout << "Title: " << Buf << std::endl;
File.read(Buf, 30);
std::cout << "Artist: " << Buf << std::endl;
File.read(Buf, 30);
std::cout << "Album: " << Buf << std::endl;
Buf[4] = 0;
File.read(Buf, 4);
std::cout << "Year: " << Buf << std::endl;
File.read(Buf, 30);
std::cout << "Comment: " << Buf << std::endl;
}
else
{ // No tag, add one
int i;
File.seekg(0, std::ios::end);
File.write("TAG", 3);
File.write("MyTitle", 7); // 30 bytes Title
for(i = 0; i < 23; i++)
File.write("", 1);
File.write("MyArtist", 8); // 30 bytes Artist
for(i = 0; i < 22; i++)
File.write("", 1);
File.write("MyAlbum", 7); // 30 bytes Album
for(i = 0; i < 23; i++)
File.write("", 1);
File.write("2004", 4); // 4 bytes Year
File.write("MyComment", 9); // 30 bytes Comment
for(i = 0; i < 21; i++)
File.write("", 1);
File.write("", 1); // One byte genre
}
}
--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet