【发布时间】:2020-09-02 16:59:12
【问题描述】:
这是我的代码,理论上一旦从终端获取搜索和文件扩展名应该查找其中包含的这些文件并打印它们的最后修改和绝对路径的目录......问题出在路径打印.. ..例如/home/ciccio/prova.txt ....而不是...... /home/ciccio/dir/subdir/prova.txt 这是因为我只将文件名传递给“realpath” ricor1()中包含的函数,它从工作目录开始并解析过去的路径..所以我认为我应该通过目录的绝对路径来解决问题......或者建议我应该怎么做
#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]);
}
}
【问题讨论】:
-
您的问题不清楚。您的意思是是否可以将命令行参数作为函数的参数传递给程序?在那种情况下:是的。 How:这在每个基本的 C 教程中都有。请提供您要解决的实际问题的描述,并附上您编写的代码,以便我们了解您的位置和需求。
-
好的,我试着更好地解释自己......我必须将返回目录路径的命令传递给函数,这可能吗?
-
你没有更清楚。