用C ++拆分文件

时间:2012-02-10 12:37:59

标签: c++ file fstream

我需要将文件拆分为多个文件而不进行压缩。我在cpp参考

上找到了这个
#include <fstream>
using namespace std;

int main () {

char * buffer;
long size;

ifstream infile ("test.txt",ifstream::binary);
ofstream outfile ("new.txt",ofstream::binary);

// get size of file
infile.seekg(0,ifstream::end);
size=infile.tellg();
infile.seekg(0);

// allocate memory for file content
buffer = new char [size];

// read content of infile
infile.read (buffer,size);

// write to outfile
outfile.write (buffer,size);

// release dynamically-allocated memory
delete[] buffer;

outfile.close();
infile.close();
return 0;
}

我想这样做。但问题是..我只能创建第一个文件,因为我只能从文件的开头读取数据。可以这样做,如果没有......分割这些文件的最佳方法是什么。

5 个答案:

答案 0 :(得分:1)

示例代码不会将文件拆分为多个文件;它只是 复制文件。要将文件拆分为多个文件,请不要关闭 输入。在伪代码中:

open input
decide size of each block
read first block
while block is not empty (read succeeded):
    open new output file
    write block
    close output file
    read another block

重要的部分是不关闭输入文件,以便每次读取 准确地获取前一个读取结束的位置。

答案 1 :(得分:0)

您可以从文件中的任何位置读取数据 - 您已经移动到最后并成功返回到开始。

您不需要:只需编写一个循环来顺序读取每个outputSize并将其写入新文件,对于某些outputSize < size

答案 2 :(得分:0)

您可以将流搜索到所需位置,然后读取流。检查这段代码。

// get size of file
infile.seekg(0,ifstream::end);
size=infile.tellg();
infile.seekg(0);

您需要做的就是记住停止读取infile的位置,关闭outfile,打开新的outfile,重新分配缓冲区并读取infile到缓冲区并写入第二个outfile。

答案 3 :(得分:0)

为什么要重新发明轮子 - 试试split

如果你想在C ++中实现它,甚至还有源代码可以获得想法

答案 4 :(得分:0)

我想我已经解决了你的问题...... 您读取了char数组中的所有第一个文件。 然后你在一个文件中写入数组的前半部分,然后在其他文件中编写数组的后半部分......

例如:

#include <fstream>
using namespace std;

int main () {

char * buffer;
long size;

ifstream infile ("test.txt",ifstream::binary);
ofstream outfile ("new.txt",ofstream::binary);
ofstream outfile2 ("new2.txt",ofstream::binary);

// get size of file
infile.seekg(0,ifstream::end);
size=infile.tellg();
infile.seekg(0);

// allocate memory for file content
buffer = new char [size];

// read content of infile
infile.read (buffer,size);

// write to outfile
outfile.write (buffer,size/2);
outfile2.write (buffer+size/2,size);

// release dynamically-allocated memory
delete[] buffer;

outfile.close();
infile.close();
outfile2.close();
return 0;
}

你也可以阅读上半部分,写下来,然后阅读下半部分并写下来......只是看看:

int main () {

char * buffer;
long size;
long halfSize;
ifstream infile ("test.txt",ifstream::binary);
ofstream outfile ("new.txt",ofstream::binary);
ofstream outfile2 ("new2.txt",ofstream::binary);

// get size of file
infile.seekg(0,ifstream::end);
size=infile.tellg();
infile.seekg(0);
halfSize = static_cast<int>(floor(size/2));
// allocate memory for file content

buffer1 = new char[halfSize];
buffer2 = new char[size-halfSize];

// read content of infile
infile.read (buffer1,halfSize);
infile.read (buffer2,size-halfSize);

// write to outfile
outfile.write (buffer1,halfSize);
outfile2.write (buffer2,size-halfSize);

// release dynamically-allocated memory
delete[] buffer;
delete[] buffer2;

outfile.close();
infile.close();
outfile2.close();
return 0;
}