我在计算目录中的常规文件时遇到了一些麻烦。
这是我的代码:
int show_regular_files(char ** path) {
DIR * dp = opendir(*path); // open the path
char d_path[BUFSIZE]; //
struct dirent *ep;
struct stat sb;
int number=0;
int rv;
if (dp != NULL){
while (ep = readdir (dp)){
sprintf(d_path,"%s/%s ",*path,ep->d_name);
rv= stat(d_path, &sb);
if(rv<0)
continue;
else{
if((sb.st_mode & S_IFMT)==S_IFREG){ // checks if a file is regular or not
if(sb.st_mode & S_IXOTH || sb.st_mode & S_IXGRP){// search permission & group owner of the file
number++;
}
}
}
}
}
else
perror("can't open the file ");
closedir(dp); // finally close the directory
return number;
}
除非我删除REGULARFILE条件检查和stat行,否则它总是打印0,然后列出目录中的所有文件。
答案 0 :(得分:1)
我认为问题出在这一行:
sprintf(d_path,"%s/%s ",*path,ep->d_name);
^
最后你有一个额外的空格,导致stat()
调用失败。你需要删除那个空间。
顺便说一句,避免sprintf()
。请改用snprintf()
。