我试图将txt文件拆分为几个新文件。这就是我迄今所做的:
long c = 0;
string s;
vector<string> v;
我需要计算我的txt文件有多少行(它有效):
while(getline(inputFile, s, '\n')){
v.push_back(s);
c++;
}
long lineNumber = c;
long max = 100;
long nFiles;
检查将创建多少个新文件:
if((lineNumber % max) ==0)
nFiles = lineNumber/max;
else
nFiles = lineNumber/max + 1;
创建新的文件名:
long currentLine = 0;
for(long i = 1; i <= nFiles; i++){
stringstream sstream;
string a_i;
sstream <<i;
sstream >> a_i;
string outputfiles = "name" +"_" + a_i +".txt";
ofstream fout(outputfiles.c_str());
for (int j = currentLine; j<max; j++){
fout << v[j]<<endl;
}
fout.close();
currentLine = max;
}
inputFile.close();
它创建文件但突然停止工作。有谁知道为什么?
答案 0 :(得分:1)
这是使用调试器可以帮助您的时间的一个主要示例。
你在这里循环:
for (int j = currentLine; j<max; j++){
fout << line[j]<<endl;
}
fout.close();
currentLine = max;
max = max + nMax;
max
可能会大于line
的大小,当您尝试访问line[j]
时,这会导致细分错误。这个内部循环真的应该检查你是否超过了line
line.size()
的长度。即使在您修复此问题后,程序逻辑也不是正确的,line
似乎不会在外部循环的每次迭代中增大,而是使line
的访问移动一个额外的max
索引,如果你不在line
结束时停止循环,那么你在尝试写的最后一个文件中总会失败。