【问题标题】:Retaining the last four fwrite()s in a file using C使用 C 保留文件中的最后四个 fwrite()
【发布时间】:2014-06-03 10:26:49
【问题描述】:

我需要一些帮助来维护我需要最后四/五笔交易的数据日志(任何 .txt 文件),并删除除此之外的任何内容。

例如:我使用 fopen() 创建了 file.txt,并开始使用 fwrite() 每 30 秒从缓冲区写入一次。前四次写入是可以的,但是当我第五次写入文件时,我希望删除第一个条目,第五个 write() 移动到第四位,其余的相应移动,即第二次到第一,第三到第二。注意:每个 write() 数据的时间和大小都与温度读数或湿度读数相同。

谢谢 高拉夫

【问题讨论】:

    标签: c linux filesystems


    【解决方案1】:
    1. 创建临时文件。
    2. 从旧文件中复制 4 个最新条目。
    3. 添加新条目。
    4. 删除旧文件。
    5. 将临时文件重命名为真实文件名。

    【讨论】:

    • 好的,我明白了,但是对于经常性的传入数据,我必须每次都创建一个临时文件并从以前创建的文件中复制数据,然后将其删除。我说的是每 30 秒流入一次数据。所以每 30 秒执行一次上述过程似乎有点开销。
    • 如果你能帮助我,这里有几点: 1.如何计算写入文件的行数? 2.如何从文件中删除“n”行条目/数据?这将帮助我使用 F_SEEK 将光标移到文件的开头并删除“n”行,因为每次写入的行数都是固定的并且等于上一个条目。
    • @GauravPratimTalukdar 开销有多大?请记住,您将获得一些保护以防止数据损坏,因为在写入新文件之前不会覆盖旧文件。
    【解决方案2】:

    然后只需使用fseek 到达第一个条目中的最后一个字符(请记住 - 文件就像数组 - 第一个字节索引为 0 等等),然后只需使用 fprintffwrite 打印 @ 987654327@ 循环到文件中,因为\b 表示退格并将删除字符。这样做直到文件从第二个条目开始或直到文件光标位于 0 索引处(使用 ftell 查看是否是),然后再次使用 fseek 返回到您之前所在的索引(再次,您可以使用ftell 将该索引保存到变量中以查看您当前的位置),然后将第五个写入文件:P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 2015-12-05
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      相关资源
      最近更新 更多