我目前正在学习Boost框架,我已经找到了如何列出我系统上的所有文件夹和文件, 使用
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <iostream>
using namespace std;
int main()
{
for ( boost::filesystem::recursive_directory_iterator end, dir("C:\\");
dir != end; ++dir ) {
cout << *dir << std::endl;
}
return 0;
}
但我遇到的唯一问题是这个过程有多慢......我做错了什么,或者只是微软的.NET版本列出所有文件要快得多? 谢谢!
答案 0 :(得分:1)
您的问题意味着比较,但您只提供了一半的信息,即您要进行比较的代码在哪里?有许多方法可以提高您提供的代码的性能,其中一些已在上面的注释中提供。
也就是说,您首先观察性能差异的原因很可能可以追溯到C#代码运行的托管环境。您的文件系统很可能在.Net的内存空间中编入索引,而您的C ++代码和Boost库直接进入文件系统,而不是从微软试图提高.NET环境效率的方式中获益。如果没有效率,C#代码似乎更有可能比相同质量的编译C ++代码慢得多。
答案 1 :(得分:0)
还取决于文件夹中存在多少文件。如果有很多文件,那么确实需要花费很多时间。你试过一个包含很少文件的文件夹吗?
答案 2 :(得分:0)
.NET版本可能已编入索引,可能只需要从平面格式读取文件名。您的建议需要打开每个目录。