이 코드는 하나의 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 ("this is an example") 공백으로 인해 "this is an example"이라는 변수가 4 가지 경우로 나뉘는데 어떻게 해결할 수 있습니까? – Joys
포인트 4 페이지 2에있는 [RFC4180의 문서] (https://tools.ietf.org/html/rfc4180)에 명시된대로 일어나지 않아야합니다.'공백은 필드의 일부로 간주되므로 무시해서는 안됩니다. 이라고 밝혔다. 또한 줄 끝 부분에 쉼표를 사용할 수 없다고 명시되어 있습니다. 따라서 다음 코드를 실행하면 fprintf (file, field1, field2 with spaces, field3 \ n ");가 실행되어야합니다. 끝에 줄 바꿈을 잊지 마라. – saeleko
또한 내 대답에 말했듯이, Excel을 사용한다면, 첫 번째 줄에'sep =,'를 추가하는 것을 잊지 마라. 이는 내 완전한 예제가 이렇게 보일 것임을 의미한다.'fprintf (file, "sep =, \ nfield1, 공백이있는 field2, field3 \ n ");'. – saeleko