使用fopen中的'r+'模式时,为什么文件必须存在?

3
为什么在打算读写文件时要添加这个限制?
我的应用程序想要以读写模式打开文件。如果使用"w+",它将破坏文件的先前内容,但同时如果文件不存在,则会创建文件。
然而,如果使用"r+"模式,我的应用程序将正常工作,但如果文件不存在,则会抛出关于文件不存在的异常。

5
因为如果它不存在,程序就没有地方可以读取了,这很合理吧?而且为了从中读取信息而创建一个新的空白文件是荒谬的。 - Igor Pejic
@Igor,标题和第一句话 - Spikatrix
2
请阅读这篇文章 - Jabberwocky
据我所知,“rw+”模式不存在。 - Jabberwocky
你能使用 a+ 进行 fseeks 并在文件中特定位置写入字节吗?因为我的应用程序在使用此选项时出现了问题。 - jsguy
显示剩余5条评论
1个回答

2

可以尝试这样做。如果第一个fopen失败,因为文件不存在,第二个fopen将会尝试创建它。如果第二个fopen也失败了,那么就存在严重的问题。

if((fp = fopen("filename","r+")) == NULL) {
    if((fp = fopen("filename","w+")) == NULL) {
        return 1;
    }
}

糟糕 - 我一定错过了“== NULL”的判断,抱歉。 - Rup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接