我编写了一个函数来判断它是否是一个文件,请参阅下面的代码:
bool isfile(const std::string & f) {
struct stat st;
stat(f.c_str(), & st);
if(S_ISREG(st.st_mode)) {
return true;
}
return false;
}
但是当我用:
调用函数时std::cout << isfile("/home/xxx/a*") << std::endl;
在/home/xxx/
中,有一些a0,a1 ......和其他文件。
奇怪的问题是,它会主要打印0
,但有时会打印1
,我不知道该功能是否存在问题。
答案 0 :(得分:3)
您不会检查stat
的返回值,而是查看st.st_mode
是否包含有效数据。因此,当stat
失败时,例如因为该文件不存在,您将处理无意义的数据。
答案 1 :(得分:0)
注意,该标准适用于UNIX系统调用和C库调用,成功时返回0,失败时返回负数。正如David Schwartz指出的那样,你的代码忽略了这一点。
我建议:
bool isfile(const std::string & f) {
struct stat st;
if(stat(f.c_str(), & st) == 0 && S_ISREG(st.st_mode))
return true;
return false;
}