【问题标题】:How to Write File in Reverse Order如何以相反的顺序写入文件
【发布时间】:2015-11-09 12:03:06
【问题描述】:

我正在开发一个以相反顺序生成文件内容的 ANSI C 应用程序。也就是说,文件末尾的字节最先接收,开头的字节最后接收。优选地,由于可能涉及的数据量,我想直接将此数据写入文件,而无需先将其安排在单独的内存缓冲区中。那可能吗?这如何使用 ANSI C 来完成?如果这只能通过不符合 ANSI 的更高级别的库来完成,那是可以接受的。

【问题讨论】:

  • 非常有趣的问题!一种解决方法是以反向顺序写入临时文件,然后读取临时文件并以正向顺序重写它。当然,这只是占用您正在谈论的内存缓冲区并使用磁盘代替它。很想看看这个解决方案。
  • 我脑海中浮现的第一个想法是先以“相反的顺序”将数据写入临时文件,然后以足够的块大小反向移动到目标文件。
  • 你事先知道需要写入多少数据吗?
  • 不是 ANSI,但类似这样的简单方法是对文件进行内存映射,因此您可以按照您喜欢的任何顺序写入,在 nix 系统上进行 mmap,完成后截断。
  • 哦,天哪,在提供我的第三个想法后我会停止这个(春天累了:)):为您的原始数据使用面向块的文件格式,格式为:{BlockSize : uint32; ReversedFlag: uint8_t;},后跟BlockSize字节数据的。然后,如果您的消费应用程序不是按顺序访问而是以更随机访问的方式访问,那么您可以选择“懒惰地”反转。 @JimFell 对不起-您对我的第二个回复的竞争条件:(

标签: file-io file-handling ansi-c


【解决方案1】:

这个问题的解决方案实际上比我最初想象的要简单得多。我能够使用fseek 将文件指针移动到文件末尾,然后在每次写入时将其逐步向后移动(减少文件指针索引)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2011-01-19
    • 2013-04-18
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多