如何根据文件大小分割文件?

时间:2012-03-16 13:44:32

标签: c++ file-io

如何将文件(最大指定大小)中的数据存储到另一个文件中。就像文件A的总大小为10 KB一样,我希望在文件X中存储3 KB,在另一个文件Y中存储剩余的7 KB。如何在C ++中执行此操作。我是初学者,所以忍受我..

注意:所有读写都是以二进制模式完成的!

3 个答案:

答案 0 :(得分:2)

如果可用,您可以将std::copy_nstd::copy与流iterators一起使用:

std::ifstream input_file;
std::ofstream output_file_1;
std::ofstream output_file_2;

// ...

auto input_iterator = std::istream_iterator<char>(input_file),
// Copy 3k to first file
std::copy_n(input_iterator,
            3072,
            std::ostream_iterator<char>(output_file_1));

// Copy the remaining to the second file
std::copy(input_iterator,
          std::istream_iterator<char>(),
          std::ostream_iterator<char>(output_file_2));

答案 1 :(得分:0)

这样做非常困难和复杂。无论如何,执行此操作的步骤是以二进制模式打开文件(例如,知道字符是X位),计算文件的字符(o = n,如果你不理解那么复杂性= n,这意味着它将花费N(这是字符数)完成它的步骤,然后对该数字进行一些数学运算,然后做一个“#34;移动&#34;每个字符到循环中的另一个文件,直到达到一定数量(例如,1000个字符为300)。新文件将具有前300个,旧文件将具有这700个字符。很容易在代码中完成,评论要求如果你想要:)

答案 2 :(得分:0)

使用类似的东西:

FILE *f1 = fopen("file1.txt", "rb");
// assuming size of f1 to be 10*1024 bytes
FILE *f2 = fopen("file2.txt", "wb");
for(int i=0;i<3*1024;++i) fputc(fgetc(f1),f2);
fclose(f2);
FILE *f3 = fopen("file3.txt", "wb");
for(int i=0;i<7*1024;++i) fputc(fgetc(f1),f3);
fclose(f3);
fclose(f1);

当然,这段代码做了很多假设,你需要用适当的保护代码来实现(例如,考虑EOF)。