【问题标题】:updating a binary file without overwriting it -> C更新二进制文件而不覆盖它-> C
【发布时间】:2011-01-21 03:40:11
【问题描述】:

我正在尝试更新包含其中一些结构的二进制文件:

typedef struct _test{
char question[100];
char answer[100];
}test;

在某些时候,我想将保存在文件中的一个答案更新为另一个答案(再次写回文件的答案),但每次我更新文件时,它都会删除所有内容并只写新的测试结构(在 fopen 中尝试使用 wb、wb+ 甚至 wa+ 模式并使用 fseek 设置光标但没有运气)。

我怎样才能编辑文件,使其不会擦除整个文件?

【问题讨论】:

    标签: c file binary


    【解决方案1】:

    使用fopen("myfile.txt", "r+b")

    【讨论】:

    • 它会以二进制形式写入文件吗?还是 rb+ 模式可以解决问题?
    • John:是的,“rb+”或“r+b”将使用二进制模式。 (我很惊讶地看到 MS 文档说“b”不能作为第一个字符出现(参见 msdn.microsoft.com/en-us/library/yeby3zcb%28v=vs.80%29.aspx);我将进行编辑以解决此问题。)
    • 不只是 MS; b 永远不会作为第一个字符有效。 fopen 的唯一有效 mode 参数由正则表达式 [arw](b?[+]?|[+]?b?) 给出。没有其他任何东西是有效的。
    • @R..:它在哪里说的?我认为“b”和“t”无论如何只存在于 DOS 和 Windows 上,只是被其他平台礼貌地忽略了。
    • @j_random_hacker:在标准中,7.19.5.3 第 3 段。“文本”模式是默认的,允许被破坏,你应该基本上总是使用@987654327 @ 旗帜。 POSIX 要求文本模式和二进制模式的行为无论如何都是相同的。一些 DOS/Windows 实现添加了一个 t 标志,以便它们可以将二进制模式设为默认值,并且仍然支持 CRLF 转换的“文本模式”。这种行为非常不合规。
    猜你喜欢
    • 2012-05-15
    • 2011-05-12
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多