记得linux下有名令,ls -R
改名令会显示当前目录下,的所有文件,所有文件加中的所有文件--反正就是里面全部内容。
再次我写了一下我对名令的实现:
我的思路:
要访问一个文件.
1.文件非目录,访问并返回
2.文件是目录,访问其中所有文件后返回.
说明由于内部 存文件夹名字数组大小有
1024个存储量,因此若有某文件按夹内部,有超出1024个文件加,该程序就崩掉了,(文件名也不可超过1024个字节);但如有需要内部数组扩大存储量即可(由于截屏软件无意间删了,这里就没有图片了)
编译:
假如上述文件是 1.c
gcc 1.c -o filename
假设编译为 1
则 gcc 1.c -o 1
则在运行的话时候
sudo ./1 [所遍历的目录]
期间可能出现权限不够,而发生错误
也可能由stat函数不能解析链接文件导致错误,可以将其改为lstat
例如
./1 /home
home/内所有文件加内所有文件。。(出隐藏文件 和. .. 这两个文件件)
如果您有,跟加高效的算法,希望能赐教一下
改名令会显示当前目录下,的所有文件,所有文件加中的所有文件--反正就是里面全部内容。
再次我写了一下我对名令的实现:
我的思路:
要访问一个文件.
1.文件非目录,访问并返回
2.文件是目录,访问其中所有文件后返回.
说明由于内部 存文件夹名字数组大小有
1024个存储量,因此若有某文件按夹内部,有超出1024个文件加,该程序就崩掉了,(文件名也不可超过1024个字节);但如有需要内部数组扩大存储量即可(由于截屏软件无意间删了,这里就没有图片了)
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
void find(char* dirnamex){
DIR * dir=NULL;
char dirname[1024];
char dirlist[1024][1204];
struct dirent * ptr;
struct stat st;
int i=0,j=0;
char path1[1024];
puts(dirnamex);
chdir(dirnamex);
getwd(dirname);
printf("dir:%s\n",dirname);
if((dir=opendir("./"))==NULL){
printf("null");
return ;
}
i=0;
while((ptr=readdir(dir))!=NULL){
if(stat(ptr->d_name,&st)==-1){
perror("error name");
}
if(strcmp(ptr->d_name,".")&&strcmp(ptr->d_name,"..")){
puts(ptr->d_name);
if(S_ISDIR(st.st_mode)){
strcpy(dirlist[i++],ptr->d_name);
}
}
}
for(j=0;j<i;j++){
find(dirlist[j]);
}
chdir("..");
}
void main(int argc ,char* argv[]){
char path[1024];
getwd(path);
find(argv[1]);
}
编译:
假如上述文件是 1.c
gcc 1.c -o filename
假设编译为 1
则 gcc 1.c -o 1
则在运行的话时候
sudo ./1 [所遍历的目录]
期间可能出现权限不够,而发生错误
也可能由stat函数不能解析链接文件导致错误,可以将其改为lstat
例如
./1 /home
home/内所有文件加内所有文件。。(出隐藏文件 和. .. 这两个文件件)
如果您有,跟加高效的算法,希望能赐教一下