fopen 模式怎么选,才不会误清空文件?
程序刚用 fopen 打开文件,还没写一个字,原内容就没了。查半天,罪魁祸首是模式字符串里的那个 w。
实测发现,w 和 w+ 一打开就把文件长度清零。想保留原内容,得用 r+;想接在末尾,用 a 或 a+。加号只代表能读写,改不了截断的规矩。
这其实是底层标志决定的。w+ 对应 O_TRUNC,文件在 fopen 返回前就已经被清空了。关掉再重开也找不回来。
选对模式只是第一步。r+ 写入会覆盖当前位置,a+ 永远写在末尾。要是只想新建、拒绝覆盖,直接用 wx 模式,已有同名文件就会报错。
最后提醒一句:打开成功不等于写完成功。fputs 和 fclose 的返回值都得检查,缓冲数据可能到关闭时才提交。
原文fopen 模式怎么选,才不会误清空文件?