你能告诉我,如何在下面的代码中将文件名(没有目录)放入我的载体中?:
int getDir (string dir, vector<string> &files)
{
DIR *dp;
struct dirent *dirp;
if ((dp = opendir(dir.c_str())) == NULL) {
cout << "Error (" << errno << ") with " << dir << endl;
return errno;
}
while ((dirp = readdir(dp)) != NULL) {
cout << dirp << endl;
files.push_back(string(dirp->d_name));
}
closedir(dp);
return 0;
}
答案 0 :(得分:2)
您可以使用stat()
,并使用st_mode
宏检查S_ISDIR
字段。
答案 1 :(得分:1)
这取决于您的操作系统。在Linux下,readdir
返回的dirent结构如下所示:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
因此您可以检查d_type字段以查看您是否有目录或文件。
答案 2 :(得分:1)
试试这个:
struct stat eStat;
stat(dirp->d_name, &eStat);
if(S_ISDIR(eStat.st_mode))
printf("found directory %s\n", dirp->d_name);
最好使用S_ISREG代替S_ISDIR