Questa funzione dovrebbe controllare tutti i file a partire da un path e stampare nome del path e la relativa size.
Sto facendo un piccolo test, con una cartella DIR contenente file1.txt, file2.txt e una cartella SUB-DIR contenente a sua volta file3.txt e img1.bmp.
Se controllo la cartella DIR funziona tutto bene, tranne per il fatto che per calcolare la size di SUB-DIR dovrò ricorsivamente calcolare la somma delle size di tutti i file e sotto directory.
Ma il mio problema è che se chiamo la funzione su DIR\SUB-DIR, il path con il trattino non me lo da buono, togliendolo si.
Qualche consiglio?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <windows.h>
#include <sys/stat.h>
#include <unistd.h>
int scan_no_recursive_path(char *path)
{
struct dirent* in_file;
DIR *fd;
printf("=== PATH = %s ===\n",path);
fd = opendir(path);
if( fd == NULL )
{
perror("File not found");
return -1;
}
while( in_file = readdir(fd) )
{
if (!strcmp (in_file->d_name, "."))
continue;
if (!strcmp (in_file->d_name, ".."))
continue;
printf("\n File\n");
int length = strlen(in_file->d_name);
char *name = malloc(sizeof(char)*(length+2+strlen(path)));
memset(name,0,strlen(name));
strncpy(name, path, strlen(path));
strcat(name, "\\");
strncat(name, in_file->d_name, length);
struct stat buf;
if ( stat(name,&buf) < 0 )
{
perror("Error: ");
return -1;
};
printf("Path = %s, Size = %d bytes\n",name, buf.st_size);
}
closedir(fd);
return 0;
}
int main()
{
return scan_no_recursive_path("DIR\\SUB-DIR");
}