【问题标题】:C Files triying to overwriteC 文件试图覆盖
【发布时间】:2023-03-23 19:25:01
【问题描述】:

我对这段代码有点头疼:

 FILE usuaris*
 ....

 usuaris=fopen("usuarisfinal.txt","a+b");
 fseek(usuaris,(pos-1)*sizeof(Tusuari),SEEK_SET);
 fwrite(&usuaux,sizeof(Tusuari),1,usuaris);

我想要做的是在“pos”位置用“usuaux”覆盖一个Tusuari寄存器,但我最终在文件末尾添加了“usuaux”。我知道将模式“a+b”更改为“r+b”我可以做我想做的事,但我不太明白为什么我不能让它这样工作!

附:对不起,可能的错误,英语对我来说是第三种语言!

【问题讨论】:

  • 你用a (append)`打开了文件,所以所有的写操作都会附加到文件中。这就是问题的根源。使用 Read Plus Binary:("r+b") 的mode 表示 1) 我想读取文件。 2)我想在当前文件位置指示符处写入文件。和 3) 我想使用 'binary' 执行所有读写操作,(没有特殊处理换行符等。也不想使用 "w+b" 作为打开 write 将导致文件被截断在fopen()

标签: c file mode


【解决方案1】:

当您以"a+" 模式打开文件时,写入将始终转到文件末尾。

man pagefopen

a+ 打开以进行读取和附加(在文件末尾写入)。这 如果文件不存在,则创建该文件。初始文件位置 for reading 在文件的开头,但 输出是 总是附加到文件的末尾。

在此模式下打开文件时,设置偏移量仅影响读取。所以使用模式"r+"是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2016-05-25
    • 2015-10-07
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多