[ Foro de C ]

stampare intera path directory

17-May-2020 11:35
Fatte Nabarcadecazzi
0 Respuestas

este es mi código, teóricamente una vez tomado del terminal, el directorio donde la búsqueda y la extensión del archivo deben buscar estos archivos contenidos en él e imprimir su última modificación y ruta absoluta ... el problema está en la impresión de ruta ... para ejemplo

/home/ciccio/prova.txt .... en lugar de ...... / home / ciccio / dir / subdir /prova.txt

Esto se debe a que solo paso el nombre del archivo a la función "realpath" contenida en ricor1 (), que comienza desde el directorio de trabajo y resuelve la ruta pasada ... así que creo que debería pasar la ruta absoluta del directorio para resolver el problema ... o sugerirme cómo debería hacerlo por favor


#include<stdio.h>
#include<sys/stat.h>
#include<errno.h>
#include<stdlib.h> 
#include<dirent.h>    
#include<stdarg.h>
#include<limits.h>
#include<string.h>
#include<time.h>
char * percorso;

////////////
char * scrivi(const char * a, char * b)
{

char *targetdir = malloc(2048);
strcpy(targetdir,a);
strcat(targetdir,"/");
strcat(targetdir,b);

//printf("%s \n", targetdir); 
return targetdir;
} 
//////////////


void ricor1(const char estensione[],const char nomedirectory[]){

struct stat attr;
char dbuf[PATH_MAX+1];
DIR * fh ;//puntatore ad una struttura DIR


struct dirent *fdata;

struct stat buf;
if((fh=opendir(nomedirectory))==NULL){
perror("ERRORE 1");
exit(errno);
}


while((fdata = readdir (fh))!=NULL){

// se è una directory richiama ricorsivamente

if(strcmp(fdata->d_name,".")==0)
{
  continue;
}
if(strcmp(fdata->d_name,"..") ==0)
{
continue;
}
if(fdata->d_type==DT_DIR)
{
 { percorso=scrivi(nomedirectory,fdata->d_name);
   ricor1(estensione,percorso);
 }
}

//
//


if(strstr(fdata->d_name,estensione)){

realpath(fdata->d_name,dbuf);

printf("[%s]",dbuf);

stat(nomedirectory,&attr);

printf("%s\n",ctime(&attr.st_mtime));
}

}

}      


void ricor2(const char estensione[]){

struct stat attr;
char dbuf[PATH_MAX+1];
DIR * fh ;//puntatore ad una struttura DIR
struct dirent *fdata;
struct stat buf;

if((fh=opendir("./"))==NULL){
perror("ERRORE 1");
exit(errno);
}


while((fdata = readdir (fh))!=NULL){

if(strstr(fdata->d_name,estensione)){

realpath(fdata->d_name,dbuf);

printf("[%s]",dbuf);

stat("./",&attr);

printf("%s\n",ctime(&attr.st_mtime));
}

}

}




int main(int argc, char *argv[])
{



  if(argc==3){

            printf("Controllo esistenza directory.. \n");

             DIR* dir=opendir(argv[2]);

          if(dir){
                   ricor1(argv[1],argv[2]);
    } else if (ENOENT==errno){

        printf("La directory passata non esiste");
  }
   else{

   printf("altro errore"); }   }


else if(argc==2){


ricor2(argv[1]);

}
}


 




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...