Code:
#include <dir.h>
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#define MAX_DIR_PATH 2048
#define FILE_LEN 200
void loadFileList(FILE *, char *, char *);
void validateFiles(FILE *, char *, char *);
void getTagDetails(char *, char *, char *, char *);
void moveFile(char *, char *, char *, char *);
int main(int argc, char *argv[])
{
FILE *filePtr = NULL;
char *dirName;
char *fileListName = "file list";
char fileNameFromFile[FILE_LEN] = "";
char backupFileName[FILE_LEN] = "";
char artist[FILE_LEN] = "", album[FILE_LEN] = "", title[FILE_LEN] = "";
dirName = argv[1];
loadFileList(filePtr, dirName, fileListName);
//validateFiles(filePtr, fileListName, fileNameFromFile);
filePtr = fopen(fileListName, "r");
if(! filePtr)
{
printf("File Not found");
getch();
exit(1);
}
while(fgets(fileNameFromFile, FILE_LEN, filePtr) != NULL)
{
strcpy(backupFileName, fileNameFromFile);
getTagDetails(fileNameFromFile, artist, album, title);
moveFile(backupFileName, dirName, artist, album);
}
fclose(filePtr);
printf("\n\ndone");
getch();
return 0;
}
void loadFileList(FILE *filePtr, char *dirName, char *fileListName)
{
DIR *dir;
struct dirent *ent;
int fileCount = 0;
filePtr = fopen(fileListName, "w");
dir = opendir(dirName);
if(! dir)
{
printf("Directory Not found");
getch();
exit(1);
}
while((ent = readdir(dir)) != NULL)
{
if(strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..") && strcmp(ent->d_name, fileListName))
{
//want to add line here<<<<<------------------------------------
{
fprintf(filePtr, "%s\n", ent->d_name);
fileCount++;
}
}
}
closedir(dir);
fclose(filePtr);
printf("Number of files = %d\n\n", fileCount);
}
void validateFiles(FILE *filePtr, char *fileListName, char *fileNameFromFile)
{
char *ch;
char delim = 'À';
int delimCount = 0;
int delimError = 0;
int headingDisplayed = 0;
filePtr = fopen(fileListName, "r");
if(! filePtr)
{
printf("File Not Found");
getch();
}
while(fgets(fileNameFromFile, FILE_LEN, filePtr) != NULL)
{
ch = fileNameFromFile;
while(*ch != '\n')
{
if(*ch == delim)
delimCount++;
ch++;
}
if(delimCount != 2)
{
delimError = 1;
if(headingDisplayed == 0)
{
clrscr();
printf("Syntax of the following files does not match: \n\n");
headingDisplayed = 1;
}
puts(fileNameFromFile);
}
delimCount = 0;
}
fclose(filePtr);
if(delimError == 1)
{
getch();
exit(1);
}
}
void getTagDetails(char *fileNameFromFile, char *artist, char *album, char *title)
{
char delim[2] = "À";
char *chPtr;
chPtr = strtok(fileNameFromFile, delim);
strcpy(artist, chPtr);
artist[strlen(chPtr)] = '\0';
chPtr = strtok(NULL, delim);
strncpy(album, chPtr, strlen(chPtr));
album[strlen(chPtr)] = '\0';
chPtr = strtok(NULL, delim);
strncpy(title, chPtr, strlen(chPtr) - 1);
}
void moveFile(char *fileNameFromFile, char *dirName, char *artist, char *album)
{
struct stat dir_stat;
char sourceFile[FILE_LEN] = "";
char destFile[FILE_LEN] = "";
static int fileCount = 1;
clrscr();
printf("Moving file %d", fileCount++);
fileNameFromFile[strlen(fileNameFromFile) - 1] = '\0';
strcat(sourceFile, dirName);
strcat(sourceFile, "\\");
strcat(sourceFile, fileNameFromFile);
strcat(destFile, dirName);
strcat(destFile, "\\");
strcat(destFile, artist);
stat(destFile, &dir_stat);
if(! S_ISDIR(dir_stat.st_mode))
mkdir(destFile);
strcat(destFile, "\\");
strcat(destFile, album);
stat(destFile, &dir_stat);
if(! S_ISDIR(dir_stat.st_mode))
mkdir(destFile);
strcat(destFile, "\\");
strcat(destFile, fileNameFromFile);
rename(sourceFile, destFile);
Sleep(500);
}