将文本文件拆分为多个文件 c++

Split text file into multiple files c++

本文关键字:文件 c++ 拆分 文本      更新时间:2023-10-16

>我正在尝试将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();

它创建文件,但突然停止工作。有谁知道为什么?

这是使用调试器可以帮助您的一个主要示例。

你在这里循环:

for (int j = currentLine; j<max; j++){
    fout << line[j]<<endl;                      
}
fout.close();
currentLine = max;
max = max + nMax; 

max可能大于line的大小,这将在您尝试访问line[j]时导致分段错误。这个内部循环确实应该检查您是否没有超过您可以使用line.size()找到的line长度。即使在修复此问题后,程序逻辑也不是完全正确,line似乎在外部循环的每次迭代中都没有增加大小,您进行访问以line移动额外的max索引,如果您在line结束时不停止循环,这将始终在您尝试写入的最后一个文件中失败。