2016-11-05 2 views
1

이 코드는 하나의 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; 

} 
} 
} 

답변

0

난 당신이 다음 문제를 해결하기 위해 결합 할 수 관련 답변을 바로 연결됩니다. 당신이, 당신이해야한다 (또한 이전 링크 설명) 파일을 반복, 확인하는 것이있어 일단 여기 How can I get the list of files in a directory using C or C++?

을 같이 당신이해야

우선, 디렉토리 목록의 모든 파일입니다 어떤 것들은 MP3 파일입니다. 이 방법을 사용하는 간단한 방법은 여기에 표시된대로 확장명을 확인하는 것입니다. Getting file extension in C 찾은 각 MP3 파일에 대해 코드를 사용하여 구문 분석하고 printf을 사용하는 대신 모든 것을 CSV 파일에 씁니다.

CSV 파일의 경우 형식은 간단하여 fprintf 또는 fwrite을 사용하여 모든 것을 기록 할 수 있습니다. Microsoft Excel에서 데이터를 읽으려는 경우 sep=,을 파일의 맨 위에 놓아야합니다. 그렇지 않으면 올바르게 읽히지 않습니다. 이미 한 번 나에게 일어났습니다 (LibreOffice에서는 문제없이 작동합니다)

+0

그게 효과가 있지만 문제가 생겼습니다 : fprintf ("this is an example") 공백으로 인해 "this is an example"이라는 변수가 4 가지 경우로 나뉘는데 어떻게 해결할 수 있습니까? – Joys

+0

포인트 4 페이지 2에있는 [RFC4180의 문서] (https://tools.ietf.org/html/rfc4180)에 명시된대로 일어나지 않아야합니다.'공백은 필드의 일부로 간주되므로 무시해서는 안됩니다. 이라고 밝혔다. 또한 줄 끝 부분에 쉼표를 사용할 수 없다고 명시되어 있습니다. 따라서 다음 코드를 실행하면 fprintf (file, field1, field2 with spaces, field3 \ n ");가 실행되어야합니다. 끝에 줄 바꿈을 잊지 마라. – saeleko

+0

또한 내 대답에 말했듯이, Excel을 사용한다면, 첫 번째 줄에'sep =,'를 추가하는 것을 잊지 마라. 이는 내 완전한 예제가 이렇게 보일 것임을 의미한다.'fprintf (file, "sep =, \ nfield1, 공백이있는 field2, field3 \ n ");'. – saeleko