C++程序 获取目录中文件列表
在操作系统的文件系统中,获取目录中的文件列表是最常见的操作之一。大多数操作系统中的文件资源管理器应用程序在后台执行相同的操作。在本文中,您将学习如何使用C++获取目录中的文件列表。
有两种方法可用于获取目录中的文件列表:
- 使用system函数-(C++中的函数)
- 使用directory_iterator-(从操作系统的命令解释器调用目录遍历命令)
1.使用system函数获取文件列表
可以通过调用系统函数并发送参数来获取目录中的文件列表 dir /a-d (对于Windows OS)(或 ls -p | grep -v / 在Linux OS中)。命令的帮助页面如下所示:
显示cmd
将使用Windows机器进行演示,并且将获取以下目录中的文件列表。
文件浏览器以查看目录
Code:
// C++中获取文件列表的程序
#include <bits/stdc++.h>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
//此变量包含到目录的路径
//必须在双引号中给出路径
//因此使用反斜杠转义引号
string path(
"\"C:\\Users\\Sauleyayan\\Desktop\\New folder\"");
// 要列出文件的命令
//故意在命令结尾添加了空格
//为路径留出空间
string command("dir /a-d ");
// 在命令字符串后面添加路径
command.append(path);
// 字符串被转换为const char *,因为系统
//函数需要
const char* final_command = command.c_str();
// 将最终命令作为系统函数的参数发送
system(final_command);
return 0;
}
输出:
程序的输出
Explanation: 首先,导入“cstdlib”头文件以允许使用系统函数。然后将文件要在其中搜索的目录路径分配给变量“path”“。接着分配了另一个名为“command”的变量要运行的命令。然后将两个变量连接起来以生成最终命令。然后定义了另一个“const char *”类型的变量,并将该变量赋值为上述连接的字符串的值。由于系统函数需要const char *作为参数,所以必须进行此转换。然后将字符数组(包含命令)传递给系统函数,该函数会输出所需的结果。
2.使用directory_iterator函数获取文件列表
可以通过在目录上使用迭代器来获取目录中的文件列表。该迭代器将逐个遍历目录的每个元素。然后区分路径属于文件还是目录,并最终显示有效的路径。
以下代码使用了C++17标准代码。
Code:
// C++程序获取
//使用directory_iterator函数的文件列表
#include
#include
#include
#include
namespace fs = std::filesystem;
int main()
{
//目录路径
std::string path
= "C:\\Users\\Sauleyayan\\Desktop\\New folder";
//这个结构体能区分文件和目录
struct stat sb;
//循环直到文件夹中的所有项都结束
for (const auto& entry : fs::directory_iterator(path)) {
//在下面的行中将路径转换为const char *
std::filesystem::path outfilename = entry.path();
std::string outfilename_str = outfilename.string();
const char* path = outfilename_str.c_str();
//检测路径是否指向非目录
//如果是,则显示路径
if (stat(path, &sb;) == 0 && !(sb.st_mode & S_IFDIR))
std::cout << path << std::endl;
}
}
输出:
程序输出结果
说明: 首先导入了头文件filesystem和sys/stat.h。然后将目录路径分配给一个变量。初始化了一个结构模板,用于区分文件和目录。然后,在一个for循环中,遍历了所有目录元素。for循环中的前三个语句只是将目录元素的路径从std :: filesystem :: path转换为const char *数据类型。这是必需的,因为stat函数需要一个字符数组的参数,因此需要进行这种转换。然后在if条件语句中检查路径是否属于目录。如果不是,则显示路径。否则,它被忽略。