【问题标题】:C fread fwrite at the beginning of a file [closed]文件开头的C fread fwrite [关闭]
【发布时间】:2013-02-11 15:51:17
【问题描述】:

我想知道是否可以使用frwite 在文件开头写入数据。让我更准确地说,我使用fopen 打开一个文件,然后使用 write 向它写入一些数据。就在关闭文件之前,我想写一些关于文件内容的摘要。我认为放置此摘要的最佳位置是在文件的开头。所以当我稍后打开文件时,我可以先阅读摘要,然后再阅读数据。

其实我放摘要的地方并不重要,只要我打开文件时能先看就行了。

【问题讨论】:

    标签: c fwrite fread


    【解决方案1】:

    不能在文件前插入数据(不重写整个文件)。

    可以覆盖文件中任意位置的某些字节。为了满足您的需求,原始文件必须保留一些字节(可能在开头)以供以后覆盖。

    FILE *f = fopen ("thefile", "r+");  // opens for read and write, positioned at beginning
    if (!f)  error_message();
    size_t n = fwrite ("newdata", 1, 7, f);  // overwrite first 7 bytes
    if (n != 7)  error_message();
    fclose (f);
    

    【讨论】:

    • 是的!问题是我不知道摘要的大小......它会一直在变化......所以我不能保留一些字节
    【解决方案2】:

    如果你问是否可以使用fwrite()putc()fprintf()等在非空文件开头插入信息,答案是否定的,你可以'不要那样做。

    您可以覆盖数据或附加数据。

    如果你想插入,你需要检查你的操作系统API,看看是否有一个特殊的功能,如果没有,你需要创建另一个文件,将摘要写入其中,然后写入内容的原始文件。另一种选择是手动移动数据以在文件开头释放足够的空间,以便在此处写入摘要。

    如果你真的想要,你可以read a text file backwards

    【讨论】:

    • 好的,谢谢,我就是这么想的……但是有没有办法从头开始读取文件呢?我可以在最后写下我的总结...
    • fseek() 设置文件位置,然后在那里执行fread()fwrite()。您需要将文件作为二进制文件打开,而不是作为 fseek() 的文本才能工作。另外,请注意如何确定文件大小,请参阅我的答案中的fsize() 给出的链接。
    • 太棒了!感谢您的帮助 !这是我第一次在这个论坛上发帖,你的回复速度太棒了!
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2020-05-14
    • 2020-12-14
    • 2021-04-30
    相关资源
    最近更新 更多