c - 读取完整目录时的递归函数不会“进入目录”
问题描述
以下函数是用c编写的:
void store_files(char *pathname){
printf("pathname = %s\n", pathname);
char nextPath[PATH_MAX];
DIR *dir;
struct dirent *sd;
struct stat stat_buffer;
int fileNum = 0;
int dirCount = 0;
if((dir = opendir(pathname)) == NULL){
printf("Cannot open directory!\n");
exit(EXIT_FAILURE);
}
while((sd = readdir(dir)) != NULL){
if(strcmp(sd->d_name, ".") == 0 || strcmp(sd->d_name, "..") == 0){
continue;
}
if(stat(pathname, &stat_buffer) != 0){
perror(pathname);
}
if(S_ISDIR(stat_buffer.st_mode)){
//Defines archive number
for(int i = 0; i < 100; i++){
if(strcmp(tmpDirPathNames[i], pathname) == 0){
dirCount++;
break;
}
}
//BUILD PATH
sprintf(nextPath, "%s/%s", pathname, sd->d_name);
store_files(nextPath);
}
else if(S_ISREG(stat_buffer.st_mode)){
printf("filename = %s & filesize = %ld\n", sd->d_name, stat_buffer.st_size);
time_t time = getFileModDate(pathname);
archiveNum[dirCount - 1].fileData[fileNum].size = stat_buffer.st_size;
archiveNum[dirCount - 1].fileData[fileNum].absolutePath = pathname;
printf("modification date = %s ", ctime(&time));
printf("fileNum = %i\n", fileNum);
fileNum++;
}
}
closedir(dir);
}
我认为没有必要解释 while 循环中的每个 if 语句的作用,因为它们与问题并不真正相关。但我会在这里更详细地解释我遇到的问题:
我的其他功能之一将通过我对压缩文件执行的提取过程创建一个包含大量 tmpdir.XXX 的 tmp 文件。
包含大量 tmpdir.XXX 的 tmp 文件示例:
tmp
->tmpdir.XXX
->TestFolder1
->TestFolder2
->tmpdir.XXX
->TestFolder3
->TestFolder4
我的功能的建议是我想从 tmp 中的每个文件中提取信息。现在,该功能可以很好地进入第一个tmpdir.xxx
并通过该文件夹中的所有文件夹,即TestFolder1 and TestFolder2
. 但是,它不会进入第二个 tmpdir.XXX,因为会发生这种情况:(printf("pathname = %s\n", pathname);
打印内容):
pathname = /mnt/c/Users/.../Desktop/.../.../.../Project2/tmp
pathname = /mnt/c/Users/.../Desktop/.../.../.../Project2/tmp/tmpdir.JlzQFY
pathname = /mnt/c/Users/.../Desktop/.../.../.../Project2/tmp/tmpdir.JlzQFY/Testfile1in2
pathname = /mnt/c/Users/.../Desktop/.../.../.../Project2/tmp/tmpdir.JlzQFY/Testfile2in2
pathname = /mnt/c/Users/.../Desktop/.../.../.../Project2/tmp/tmpdir.JlzQFY/tmpdir.QE1nk2
注意最后一个打印,它将下一个 tmpdir.XXX 添加到第一个打印上。我真的不明白这里发生了什么,我多年来一直盯着这个试图解决这个问题。
解决方案
推荐阅读
- javascript - 未捕获的类型错误:无法读取未定义的属性(读取“attribute_value”)
- db2 - DB2 Z/OS - 重新验证 UDF 和存储过程
- python - python setup.py sdist bdist_wheel 引发`TypeError:预期的字符串或类似字节的对象`
- java - 单链表删除方法不识别连接字符串参数?
- python - Python - 编写一个函数,其中包含 x 个子列表,每个子列表中有 y 个元素,每个元素等于 z
- javascript - Ajax CallBack 没有时间触发
- android-studio - 如何在 Android Studio 的 Textviews 中显示来自 SQLite 查询对象的数据
- python - 计算 MAPE 时,带有网格搜索的 FBProphet 会引发错误
- pandas - 在 Python 中的地图上绘制方式(线串)
- generics - 将 Rust 泛型约束到自定义数据类型