此代码用于读取一个mp3文件ID3V1标签。但我有一个MP3文件很少的目录。我想添加一些东西,让我的程序读取目录中的所有MP3文件。 然后我必须将所有ID3V1标签导出为CSV文件。
我不知道该怎么做,任何帮助都会受到赞赏。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char tag[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[30];
unsigned char genre;
}mp3Info;
int main (int argc, char *argv[])
{
if ( argc != 1 )
{
printf( "Please choose one file: %s <song.mp3> \n", argv[0] );
} type FILE,
file = fopen("song.mp3", "rb");
if (file == NULL) {
printf("I couldn't open: %s for reading.\n");
exit(0);
}
else
{
mp3Info tag_in;
fseek(file, -sizeof(mp3Info), SEEK_END);
if (fread(&tag_in, sizeof(mp3Info), 1, file) != 1)
{
printf("Could not read the tag\n");
exit (0);
}
if (memcmp(tag_in.tag, "TAG", 3) == 0)
{
printf("Title: %.30s\n", tag_in.title);
printf("Artist: %.30s\n", tag_in.artist);
printf("Album: %.30s\n", tag_in.album);
printf("Year: %.4s\n", tag_in.year);
if (tag_in.comment[28] == '\0')
{
printf("Comment: %.28s\n", tag_in.comment);
printf("Track: %d\n", tag_in.comment[29]);
}
else
{
printf("Comment: %.30s\n", tag_in.comment);
}
printf("Genre: %d\n", tag_in.genre);
}
else
{
fprintf(stderr, "The program has failed to get the Tags\n");
return EXIT_FAILURE;
}
fclose(file);
return 0;
}
}
}
答案 0 :(得分:0)
为了简短起见,我只会链接相关的答案,然后您可以将它们结合起来解决问题。
您要做的第一件事就是列出目录中的所有文件,如下所示How can I get the list of files in a directory using C or C++?
一旦你得到了,你应该遍历你的文件(这也在前面的链接中解释),检查哪些是MP3文件。一个简单的方法(尽管不是最好的方法)是检查它的扩展名,如下所示Getting file extension in C对于你找到的每个MP3文件,只需使用你的代码来解析它,而不是使用{{1}将所有内容写入CSV文件。
对于CSV文件,格式非常简单,您只需使用printf
或fprintf
即可编写所有内容。如果您打算使用Microsoft Excel读取数据,请不要忘记将fwrite
放在文件的顶部,否则它将无法正确读取,它已经发生在我身上(它在LibreOffice上运行正常它)