[ Foro de C ]
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]);
}
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)