我正在尝试将大型数据文件拆分为几个小文本文件。以下代码每次都会打开和关闭一个新文件,这是不可行的。有没有其他方法可以做到这一点?
ifstream infile(file_name);
if(infile)
{
char val;
while(!infile.eof())
{
ofstream ofile (ofile_name);
infile >> val;
ofile << val;
if( infile.peek() == '\n' )// last entry on the line has been read
{
row_counter++;
if (row_counter == win_size)
// generate new ofile_name
}
ofile.close();
}
infile.close();
}
答案 0 :(得分:1)
如果不打开和关闭输出文件,您将无法创建多个输出文件。
原因是,每个输出文件都应具有唯一的名称。您必须为输出文件生成有用的名称。文件(内容)和文件名之间的连接将在open调用(或ofstream构造函数)中完成。
修改强>
要避免每个字符的打开和关闭,您需要状态变量。在您的示例中,row_counter
可用于它。您需要执行以下步骤:
// generate new ofile_name
这可以通过这种方式完成:
if(infile)
{
char val;
row_counter = 0;
ofstream ofile (ofile_name);
while(!infile.eof())
{
infile >> val;
ofile << val;
if( infile.peek() == '\n' )// last entry on the line has been read
{
row_counter++;
if (row_counter == win_size)
{
row_counter = 0;
ofile.close();
// generate new ofile_name
ofile.open(ofile_name); // you might change the nMode parameter if necessary
}
}
}
ofile.close();
infile.close();
}