我有一个先前在General strategies for memory/speed problems中提到过的代码,它抛出了这个错误:
boost::filesystem::directory_iterator::construct: Too many open files
除了(貌似)占用了我所有的系统资源并减慢了我的程序。
我正在处理数百到数千个文件,并经常使用下面的代码调用以获取目录的内容。每个文件基本相同,整个程序中的内存应该很少 - 但是,程序的速度会迅速减慢到蜗牛的速度,之后会因上述错误而崩溃。
我猜测提升基本上所有目录都在内存中打开......但我不知道在哪里/如何等等。任何帮助或指针都会非常感激。谢谢!
static bool FileOps::getDirectoryContents(const string dirName, vector<string> *conts);
bool getDirectoryContents(const string dirName, vector<string> *conts) {
path p(dirName);
try {
// Confirm Exists
if(!exists(p)) {
fprintf(stderr, "ERROR: '%s' does not exist!\n", dirName.c_str());
return false;
}
// Confirm Directory
if(!is_directory(p)) {
return false;
}
conts->clear();
// Store paths to sort later
typedef vector<path> vec;
vec v;
copy(directory_iterator(p), directory_iterator(), back_inserter(v));
sort(v.begin(), v.end());
for(vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it) {
conts->push_back(it->string());
}
} catch(const filesystem_error& ex) {
// THROWS ERROR: "boost::filesystem::directory_iterator::construct: Too many open files"
fprintf(stderr, "ERROR: '%s'!\n", ex.what());
return false;
}
return true;
}