我刚接触c++,编写了以下代码来生成10个文件名递增的1 MB文件
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
int main() {
stringstream file_name_ss;
std::ofstream file;
for (int i = 0; i < 10; ++i) {
file_name_ss << "file_" << i << ".ini";
string file_name = file_name_ss.str();
int size = 1024 * 1024 * 1; //~1MB
file.open( file_name, ios::app);
for (int x = 0; x < size; x++) {
file << "a";
}
}
}
当我运行它的程序只有一个文件(file_0.txt)是生成.这第二个循环打破/转义第一?
我试着在网上查过了但没找到任何超过第一个文件的东西
编辑:我在内部循环中添加了file.close();
行,使循环正常工作(谢谢Sam Varshavchik)。
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
int main() {
stringstream file_name_ss;
std::ofstream file;
for (int i = 0; i < 10; ++i) {
file_name_ss << "file_" << i << ".ini";
string file_name = file_name_ss.str();
int size = 1024 * 1024 * 1; //~1MB
file.open( file_name, ios::app);
for (int x = 0; x < size; x++) {
file << "a";
file.close();
}
}
}
但我现在有一个新问题:现在文件名看起来像这样:
不是一个可怕的错误,但仍然有点烦人。我认为这与这部分有关:
file_name_ss << "file_" << i << ".ini";
3条答案
按热度按时间ncgqoxb01#
ao218c7q2#
你需要在写完文件后关闭它,而且,你的代码没有清除之前的文件名,所以你只是不断地添加,把它添加到你的for循环的末尾。
8cdiaqws3#
你有 * 两 * 个问题,这实际上是同一个问题,但做了两次:您只有一个字符串和文件流对象,当循环迭代时,它们不会被“重置”。
例如,单个
file
对象只能打开 * 一次 *,任何不关闭它而再次打开它的尝试都将失败。对于字符串流,每次迭代都会在你试图打开的文件名后面加上一个后缀,比如在第二次迭代中你会试图打开
file_0.inifile_1.ini
文件,以此类推。解决这两个问题的简单方法是:将变量定义移动到循环 * 内部 *:
[Note代码应该添加一些错误检查。]