![]() |
1
91
从C++17开始
从C++17开始,
|
![]() |
2
38
在标准C++中,技术上无法做到这一点,因为标准C++没有目录的概念。如果你想稍微扩展一下你的网络,你可能想考虑使用 Boost.FileSystem 。这已被接受纳入TR2,因此这为您提供了最好的机会,使您的实施尽可能接近标准。 一个直接取自网站的例子:
|
![]() |
3
30
如果使用Win32 API,则可以使用 查找第一个文件 和 查找下一个文件 功能。 http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx 对于目录的递归遍历,您必须检查每个目录 WIN32_FIND_DATA.dw文件属性 检查是否 FILE_ATTRIBUTE_DIRECTORY 位已设置。如果设置了该位,则可以递归调用该目录下的函数。或者,您可以使用堆栈来提供与递归调用相同的效果,但避免非常长的路径树的堆栈溢出。
|
![]() |
4
22
你可以用新的让它更简单
C++11
基于范围
|
![]() |
5
21
一个快速的解决方案是使用C Dirent.h 图书馆。 维基百科的工作代码片段:
|
![]() |
6
9
您可以使用
|
![]() |
7
5
除了上述boost::文件系统之外,您可能还需要检查 wxWidgets::wxDir 和 Qt::QDir . wxWidgets和Qt都是开源的跨平台C++框架。
以下是示例代码(取自 here #示例8-5),显示了如何迭代所有子目录。
|
![]() |
8
3
Boost::filesystem提供了recursive_directory_iterator,这对于执行此任务非常方便:
|
![]() |
9
3
您可以使用
|
![]() |
10
2
我们在2019年。我们有。。。
filesystem
标准库
有一个重要的注意事项 this link 如果你正在考虑可移植性问题。上面写着:
文件系统库最初是作为
@adi-shavit在std::experimental中回答了这个问题,并在2017年更新了这个答案。我想提供更多关于该库的详细信息,并展示更详细的示例。
std::filesystem::recursive_directory_iterator
是一个
如果你不想递归迭代子目录的条目,那么 directory_iterator 应该使用。
两个迭代器都返回一个对象
directory_entry
.
考虑下面的例子。我一直在使用
g++示例.cpp--标准=c++17-lstdc++fs-墙
|
![]() |
11
2
您可能最适合使用boost或c++14的实验性文件系统。 如果 您正在解析一个内部目录(即程序关闭后用于存储数据的目录),然后创建一个索引文件,其中包含文件内容的索引。顺便说一句,你将来可能需要使用boost,所以如果你没有安装它,请安装它!其次,您可以使用条件编译,例如:
每个案例的代码取自 https://stackoverflow.com/a/67336/7077165
|
![]() |
12
1
你没有。C++标准没有目录的概念。将字符串转换为文件句柄取决于实现。该字符串的内容及其映射到的内容取决于操作系统。请记住,C++可用于编写该操作系统,因此它在尚未定义如何迭代目录的级别上使用(因为您正在编写目录管理代码)。 查看您的操作系统API文档,了解如何做到这一点。如果你需要便携,你必须有一堆 #ifdef 适用于各种操作系统。 |
![]() |
13
0
您需要调用特定于操作系统的函数进行文件系统遍历,例如
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |