读取文件,将其反转并将其写入另一个文件

时间:2012-12-04 15:55:21

标签: c file-io

我们有一个文本文件,按排序顺序包含1000万个整数。需要在C中编写程序来反转这些数字并将其写入单独的文件。使用哪种数据结构以及如何在内存中复制如此庞大的数据?对于倒车,我应该使用fseek或存储在某些数据结构中然后反向? 请帮忙。

2 个答案:

答案 0 :(得分:2)

如果要在基本桌面系统上运行此功能,则不需要除(动态)阵列之外的特殊数据结构。

只需为例如空间分配空间最初为1,000个数字,启动加载,并在耗尽时将分配大小加倍。这会像这样增长数组:

1,000 -> 2,000 -> 4,000 -> 8,000 -> 16,000 -> 32,000 ->

64,000 - > 128,000 - > 256,000 - > 512,000 - > 1024000

所以它会对realloc()进行10次调用,这真的应该没问题。

在数组中输入数字后,只需将数字向后循环并将每个数字打印到输出文件中。

当然,您可以使用这样一个事实:您知道有一百万个数字对您有利,并且可以适当地设置初始大小。

答案 1 :(得分:1)

我建议使用固定大小的缓冲区(文件系统的块大小)并从文件末尾读取块,然后将其写入新文件向后读取缓冲区。

这样你就不需要realloc任何缓冲区(这是一个代价高昂的操作,尽管对于兆字节大小的文件可能没问题)。