更新二进制文件而不覆盖它->;C
我正在尝试更新一个二进制文件,该文件包含以下结构:更新二进制文件而不覆盖它->;C,c,file,binary,C,File,Binary,我正在尝试更新一个二进制文件,该文件包含以下结构: typedef struct _test{ char question[100]; char answer[100]; }test; 在某种程度上,我想将保存在文件中的一个答案更新为另一个答案(再次将答案写回文件),但是,每次我更新文件时,它都会删除所有内容,只写入新的测试结构(在fopen中尝试了wb、wb+甚至wa+模式,并使用fseek设置光标,但没有运气) 如何编辑文件,使其不会擦除整个文件?使用fopen(“myfile.txt”,
typedef struct _test{
char question[100];
char answer[100];
}test;
在某种程度上,我想将保存在文件中的一个答案更新为另一个答案(再次将答案写回文件),但是,每次我更新文件时,它都会删除所有内容,只写入新的测试结构(在fopen中尝试了wb、wb+甚至wa+模式,并使用fseek设置光标,但没有运气)
如何编辑文件,使其不会擦除整个文件?使用
fopen(“myfile.txt”,“r+b”)
它将以二进制文件写入文件?是的,rb+或r+b将使用二进制模式。(我很惊讶地看到微软的文档说“b”不能作为第一个字符出现(请参阅);我将进行编辑以解决这个问题。)<代码>b作为第一个字符永远无效。fopen
的唯一有效的mode
参数由正则表达式[arw](b?[+]?|[+]?b?
给出。其他任何内容都无效。@R..:它在哪里说的?我认为“b”和“t”只存在于DOS和Windows上,只是被其他平台礼貌地忽略了。@j_random_hacker:在标准7.19.5.3第3段中。“文本”模式是默认模式,允许中断,因此基本上应始终使用b
标志。POSIX要求文本模式和二进制模式的行为无论如何都是相同的。一些DOS/Windows实现添加了t
标志,这样它们就可以将二进制模式设为默认模式,并且仍然支持CRLF转换的“文本模式”。这种行为是非常不一致的。