C/Visual C - No puedo imprimir la ruta completa del archivo

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 59 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo imprimir la ruta completa del archivo

Publicado por metalcarter (1 intervención) el 17/05/2020 11:48:20
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 pls...



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#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 ;
 
 
struct dirent *fdata;
 
struct stat buf;
if((fh=opendir(nomedirectory))==NULL){
perror("ERRORE 1");
exit(errno);
}
 
 
while((fdata = readdir (fh))!=NULL){
 
 
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]);
 
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder