【发布时间】:2015-12-18 20:35:51
【问题描述】:
下面的代码尝试在 ./out 文件夹中创建 800 个文件。在带有 g++ 4.9.2 的 Linux Debian 上,该程序可以正常工作。但是在带有 g++ 5.2.0 (MinGW) 的 Windows 7 或 8 上,程序在 509 个文件处停止。该错误似乎是在类 Task 的构造函数中使用 emplace_back 和 ofstream 的组合。是bug吗?
//g++ -std=c++11 main.cpp
#include <sstream>
#include <fstream>
#include <list>
#include <iostream>
#ifdef _WIN32
#include <io.h>
#else
#include <sys/stat.h>
#endif
using namespace std;
int i;
struct Task
{
ofstream out;
Task(string file_name): out(file_name)
{
if(!out) {cout<<i<<"\n"; exit(1);}
}
};
int main()
{
#ifdef _WIN32
string output_folder = ".\\out";
mkdir(output_folder.c_str());
output_folder+="\\";
#else
string output_folder = "./out";
mkdir(output_folder.c_str(),S_IRWXU);
output_folder+="/";
#endif
list<Task> ltask;
for(i=0; i<800; i++)
{
ostringstream os;
os<<output_folder<<i;
ltask.emplace_back(os.str());
}
return 0;
}
【问题讨论】:
-
如果您在 Windows 机器上运行防病毒软件,我会关闭它并重试。可能是它阻止它创建太多文件。
-
这是一个 FAT16 文件系统吗?在那种情况下the maximum number of files in a single folder is 512
标签: c++