将大型数据文件拆分为多个小文件(文本格式)

时间:2012-06-18 10:33:37

标签: c++ file-handling

我正在尝试将大型数据文件拆分为几个小文本文件。以下代码每次都会打开和关闭一个新文件,这是不可行的。有没有其他方法可以做到这一点?

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();
}

1 个答案:

答案 0 :(得分:1)

如果不打开和关闭输出文件,您将无法创建多个输出文件。

原因是,每个输出文件都应具有唯一的名称。您必须为输出文件生成有用的名称。文件(内容)和文件名之间的连接将在open调用(或ofstream构造函数)中完成。

修改

要避免每个字符的打开和关闭,您需要状态变量。在您的示例中,row_counter可用于它。您需要执行以下步骤:

  • 在你的while(!infile.eof())循环之前打开初始文件
  • 关闭你的ofile,生成下一个名字并打开你写// 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(); 
}