我不知道如何使用文件系统查找 .txt 文件 c++
I don't know how to use filesystem to look for .txt files c++
我想在我的项目中使用 std::filesystem
,这将允许我在当前目录中显示 .txt
个文件(我使用 Ubuntu,我不需要Windows 函数,因为我已经在 Whosebug 上看到了一个)。
这是我的 GitHub 回购:
https://github.com/jaroslawroszyk/-how-many-pages-per-day
我有这样一个问题的修复方法:
void showFilesTxt()
{
DIR *d;
char *p1, *p2;
int ret;
struct dirent *dir;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
p1 = strtok(dir->d_name, ".");
p2 = strtok(NULL, ".");
if (p2 != NULL)
{
ret = strcmp(p2, "txt");
if (ret == 0)
{
std::cout << p1 << "\n";
}
}
}
closedir(d);
}
}
但是我在这里输入的代码想用C++17,但是我不知道如何找到.txt
文件,现在我写:
for (auto &fn : std::filesystem::directory_iterator("."))
if (std::filesystem::is_regular_file(fn))
{
std::cout << fn.path() << '\n';
}
在 C++20 中,您可以使用 std::string::ends_with
成员函数检查 path().string()
是否以 .txt
结尾:
#include <filesystem>
#include <iostream>
int main() {
for(auto& de : std::filesystem::directory_iterator(".")) {
if(de.is_regular_file() && de.path().string().ends_with(".txt")) {
std::cout << de << '\n'; // or `de.path().string()
}
}
}
如果您查看 returns 文件扩展名的参考 (https://en.cppreference.com/w/cpp/filesystem/path) you will find the extension()
method on paths (https://en.cppreference.com/w/cpp/filesystem/path/extension)。现在您只需在路径的扩展名上使用 string()
函数并比较字符串。
类似
for (auto& p : std::filesystem::directory_iterator(".")) {
if (p.is_regular_file()) {
if (p.path().extension().string() == ".txt") {
std::cout << p << std::endl;
}
}
}
我想在我的项目中使用 std::filesystem
,这将允许我在当前目录中显示 .txt
个文件(我使用 Ubuntu,我不需要Windows 函数,因为我已经在 Whosebug 上看到了一个)。
这是我的 GitHub 回购:
https://github.com/jaroslawroszyk/-how-many-pages-per-day
我有这样一个问题的修复方法:
void showFilesTxt()
{
DIR *d;
char *p1, *p2;
int ret;
struct dirent *dir;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
p1 = strtok(dir->d_name, ".");
p2 = strtok(NULL, ".");
if (p2 != NULL)
{
ret = strcmp(p2, "txt");
if (ret == 0)
{
std::cout << p1 << "\n";
}
}
}
closedir(d);
}
}
但是我在这里输入的代码想用C++17,但是我不知道如何找到.txt
文件,现在我写:
for (auto &fn : std::filesystem::directory_iterator("."))
if (std::filesystem::is_regular_file(fn))
{
std::cout << fn.path() << '\n';
}
在 C++20 中,您可以使用 std::string::ends_with
成员函数检查 path().string()
是否以 .txt
结尾:
#include <filesystem>
#include <iostream>
int main() {
for(auto& de : std::filesystem::directory_iterator(".")) {
if(de.is_regular_file() && de.path().string().ends_with(".txt")) {
std::cout << de << '\n'; // or `de.path().string()
}
}
}
如果您查看 returns 文件扩展名的参考 (https://en.cppreference.com/w/cpp/filesystem/path) you will find the extension()
method on paths (https://en.cppreference.com/w/cpp/filesystem/path/extension)。现在您只需在路径的扩展名上使用 string()
函数并比较字符串。
类似
for (auto& p : std::filesystem::directory_iterator(".")) {
if (p.is_regular_file()) {
if (p.path().extension().string() == ".txt") {
std::cout << p << std::endl;
}
}
}