gpt4 book ai didi

c++ - C++ 中的统计和 S_IFREG

转载 作者:行者123 更新时间:2023-11-28 03:46:11 24 4
gpt4 key购买 nike

void fun1(char *fl){
//flNamep : stores the path of our directory
DIR *dip;
struct dirent *dit;
dip = opendir(fl);
if (dip==NULL) {cerr<<"Error\n";exit(-1);}

while ((dit=readdir(dip)))
{
string trun = (dit->d_name);
struct stat buff;
stat(dit->d_name, &buff);

if (((buff.st_mode & S_IFREG)==S_IFREG))
{cout<<"File"<<endl;}
else if (((buff.st_mode & S_IFDIR)==S_IFDIR))
{cout<<"Dir"<<endl;}
}
closedir(dip);
}

代码不区分目录和文件。我错过了什么吗?我不能使用 Boost 或任何其他 STL。只有 C Posix 支持的文件。需要知道我错了。

根据答案更新代码

    DIR *dip;   
struct dirent *dit;
dip = opendir(flNamep);
if (dip==NULL) {cerr<<"Err\n";exit(-1);}

while ((dit=readdir(dip)))
{
string trun = (dit->d_name);
string fullpath = flNamep;
fullpath+='/';
fullpath+=trun;

if((trun==".") || (trun=="..")) {cout<<"";}
else
{
struct stat buff;

stat(dit->d_name, &buff);
if (((buff.st_mode & S_IFDIR)==S_IFDIR))
{cout<<"Dir"<<endl;}
else
{cout<<"File"<<endl;}

}

最佳答案

我怀疑 stat 实际上因 ENOENT 而失败(没有这样的文件)所以 buff 不包含任何有用的东西。

stat(dit->d_name, &buff); /* dirent.d_name is just the name, not the full path */

您可能想要连接 fl, "/", d_name。但首先,检查 stat 返回的值。

关于c++ - C++ 中的统计和 S_IFREG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602634/

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