此代碼工作讀取一個mp3文件ID3V1標籤。但我有一個MP3文件很少的目錄。我想添加一些內容讓我的程序讀取目錄中的所有MP3文件。 然後我必須將所有ID3V1標籤導出爲CSV文件。閱讀標籤爲幾個MP3文件
我不知道該怎麼做,任何幫助將不勝感激。
#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;
}
}
}
這是工作,但我有一個問題,當我這樣做:fprintf(「這是一個例子」) 我的變量「這是一個例子」由於空格分爲4種情況,我該如何解決它? – Joys
Mhh否,這不應該發生,如[RFC4180的文檔](https://tools.ietf.org/html/rfc4180)在第4頁第2頁中所述'空間被認爲是字段的一部分,不應忽略.'。它還規定,你不能在行末加一個逗號。這意味着如果你運行下面的代碼:'fprintf(file,「field1,field2 with spaces,field3 \ n」);'它應該可以正常工作。不要忘記最後的換行符。 – saeleko
同樣如我在回答中所說,如果你使用Excel,不要忘記在第一行添加'sep =,',這意味着我的完整示例看起來就是這樣'fprintf(file,「sep =,\ nfield1, field2帶空格,field3 \ n「);'。 – saeleko