Manca il link sulle specifiche del file m3u è fondamentale!
Non è buona norma modificare "argc" e "argv"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXPATH 256
void fgets_wintoc(char *b)
{
int l = strlen(b);
if ( b[l - 2] == '\r')
b[l - 2] = '\0';
else if ( b[l - 1] == '\n')
b[l - 1] = '\0';
}
void m3u_parse(FILE* m3u,FILE* d)
{
printf("parsing file...\n");
int line = 0;
char buffer[MAXPATH];
while ( fgets(buffer,MAXPATH,m3u) )
{
fgets_wintoc(buffer);
++line;
if (buffer[0] == '#')
{
printf("\tskip line(%d) started with #\n",line);
}
else
{
FILE* test = fopen(buffer,"r");
if ( test == NULL)
{
printf("\tfile %s at line(%d) can't open\n",buffer,line);
}
else
{
printf("\tadd file %s at line(%d)\n",buffer,line);
fclose(test);
fprintf(d,"%s\n",buffer);
}
}
}
printf("End parser");
}
int main(int argc, const char * argv[])
{
char listpath[MAXPATH];
char m3upath[MAXPATH];
puts(".M3U\n");
if (argc == 1)
{
printf("Use default path:");
strcpy(m3upath,"playlist.m3u");
strcpy(listpath,"mylist.txt");
}
else
{
printf("Use param path:");
strcpy(m3upath,argv[1]);
if (argc == 2)
strcpy(listpath,"mylist.txt");
else
strcpy(listpath,argv[2]);
}
printf("\n\tm3u:%s\n\tlst:%s\n\n",m3upath,listpath);
printf("Open file:");
FILE* dest = fopen(listpath, "w");;
if ( dest == NULL)
{
printf("error destination file.\n");
return -1;
}
FILE* m3u = fopen(m3upath, "r");
if ( m3u == NULL)
{
fclose(dest);//cordiale
printf("error m3u file.\n");
return -1;
}
printf("ok\n");
m3u_parse(m3u,dest);
//cordiale
fclose(m3u);
fclose(dest);
return 0;
}
Non so se funziona, l'ho scritto al volo,ma sicuramente con un pò di debug andrà.