gpt4 book ai didi

c++ - 递归计数文件和给定目录的所有目录

转载 作者:行者123 更新时间:2023-12-02 10:05:28 29 4
gpt4 key购买 nike

我一直在从事这个项目,但仍停留在这段代码中的一行上。

这基本上是在C++环境中使用UNIX递归遍历目录中的文件和目录数,但是每当我执行递归调用时,都会出错:

Segmentation fault (core dumped)

我以为是因为我没有勾选“。”和“..”,但不是。

递归调用有什么问题吗?
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <iostream>

using namespace std;


void cntFile(string it, int &reg, int &der, size_t &size)
{
DIR * dirp;
struct dirent *entry;
struct stat file_stats;

dirp = opendir(it.c_str());
while ((entry = readdir(dirp)) != NULL)
{
if (entry->d_type == DT_REG)
{
reg++;
stat(getcwd(entry->d_name,sizeof(entry->d_name)), &file_stats);
size += (unsigned int) file_stats.st_size;

}
else if (entry->d_type == DT_DIR)
{

if(string(entry->d_name) != ".." | string(entry->d_name) != ".")
{
string temp;
temp.append(it + entry->d_name + "/");
cntFile(temp, reg, der, size);
}
der++;
}
}
closedir(dirp);
}

int main (void)
{
int reg = 0;
int der = 0;
size_t size = 0;
string it = "/usr/share/";
cntFile(it, reg, der, size);
printf("The total number of directories in directory is %d \n", reg);
printf("The total number of files in directory is %d \n", der);
printf("The total number of bytes occupied by all files in directory is %zu\n", size);
return 0;
}

最佳答案

如何使用 readdir 及其返回指针的结构是一个主要问题。

从上面链接的引用:

The application shall not modify the structure to which the return value of readdir() points, nor any storage areas pointed to by pointers within the structure.



但这正是您使用 getcwd 调用所做的,修改结构成员 d_name的内容。

如果要修改 d_name中名称的内容,则需要创建自己的本地副本并使用它。

关于c++ - 递归计数文件和给定目录的所有目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60389119/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com