我正在尝试从目录中只读取.txt文件。
我没有使用数组。
我正在使用opendir()
打开我的目录。
d->d_name
列出了我的所有文件以及子文件夹。
我想只读.txt
而不是子文件夹。
请帮帮我。 感谢
答案 0 :(得分:1)
您不能使用FindFirstFile和FindNextFile吗?
答案 1 :(得分:1)
嗯,比如:
答案 2 :(得分:1)
您可以使用stat()
功能来确定struct dirent
所代表的文件类型。
struct stat sb;
int rc = stat(filename, &sb);
// error handling if stat failed
if (S_ISREG(sb.st_mode)) {
// it's a regular file, process it
} else {
// it's not a regular file, skip it
}
阅读手册页了解详情。还要注意d_name
中的文件名不包含目录部分。如果您所在的目录与opendir
不同,则需要预先添加目录名称(如果需要,还需要目录分隔符)。
有关C ++的替代方案,请参阅boost::filesystem。
答案 3 :(得分:0)
您可以尝试将文件名放入一个简单的结构(例如字符串数组或向量),然后将对该结构的引用传递给修剪不使用.txt扩展名的名称的函数
在函数中,查看每个文件名(for循环会很方便),并使用String库中的find函数查看最后四个字符是否== .txt。您可以重置开始搜索字符串的位置为string_name.length - 4,这样您只需比较最后几个字符。
Cplusplus.com是字符串库之类的很好的参考:http://www.cplusplus.com/reference/string/string/find/
答案 4 :(得分:0)
假设您使用的是Linux / Posix系统,则可以使用 scandir(...)。您可以在手册页上找到详细信息,但简而言之,您必须提供一个过滤器函数,该函数将 dirent 指针作为参数,如果要包含该条目,则返回非零值(在你的情况,你会检查以.txt结尾的名字,以及可能是dirent结构中的文件类型。
答案 5 :(得分:0)
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, char *argv[])
{
DIR *dir;
struct dirent *entry;
int pos;
if (argc < 2)
{
printf("Usage: %s <directory>\n", argv[0]);
return 1;
}
if ((dir = opendir(argv[1])) == NULL)
{
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL)
{
if (entry->d_type != DT_REG)
continue;
pos = strlen(entry->d_name) - 4;
if (! strcmp(&entry->d_name[pos], ".txt"))
{
printf("%s\n", entry->d_name);
}
}
if (closedir(dir) == -1)
{
perror("closedir");
return 1;
}
return 0;
}