`File`对象访问模式的区别(即w+,r+)是什么?

65
在Ruby中使用文件时,r+w+模式有什么区别? a+模式呢?
4个回答

134
请参见http://www.tutorialspoint.com/ruby/ruby_input_output.htm 引用如下:
r 只读模式。文件指针放在文件开头。这是默认的模式。
r+ 读写模式。文件指针将放在文件开头。
w 只写模式。如果文件存在,则覆盖该文件。如果文件不存在,则创建一个新文件进行写入。
w+ 读写模式。如果文件存在,则覆盖现有文件。如果文件不存在,则创建一个新文件进行读取和写入。 a 只写模式。如果文件存在,则文件指针位于文件末尾。即,文件处于追加模式。如果文件不存在,则创建一个新文件进行写入。
a+ 读写模式。如果文件存在,则文件指针位于文件末尾。文件以追加模式打开。如果文件不存在,则创建一个新文件进行读取和写入。 (r+、 w+ 和 a+ 都是读写模式。w+ 截断文件。a+ 追加。w+ 和 a+ 都会在文件不存在时创建文件。)

1
谢谢,你确认了对于w+表示追加的观念是错误的。 - akostadinov
@Jonathan Figland 请查看这个链接 - Ratatouille
@Ratatouille,那个问题似乎已经关闭了。那里的评论似乎解决了主要问题。问题是否已解决? - Jonathan Fingland
@JonathanFingland 是的,问题已经解决。我想在这里提到的是,在 a+ 模式下 ruby documentation 似乎同意 fopen api,但未能遵守它。 - Ratatouille

14

访问模式r+w+a+读写模式打开文件,但有以下区别:

r+从文件开头开始,但如果文件不存在,则不会创建新文件。

w+如果文件存在,则将现有文件截断为零长度,否则创建新文件。

a+如果文件存在,则从文件末尾开始,否则创建新文件。


14

为了我自己的利益/作为参考目的:

|mode|reads|writes|starts writing at|if preexists
|r   |yes  |      |n/a              |ok
|r+  |yes  |yes   |beginning        |fail
|w   |     |yes   |beginning        |overwrite
|w+  |yes  |yes   |beginning        |overwrite
|a   |     |yes   |end              |append
|a+  |yes  |yes   |end              |append

关于"w+"和其他的"&:read"表述怎么样? - user1767316

6

答案: r+和w+都可以读取和写入文件,但r+不会截断(删除)文件的内容,同时如果该文件不存在,则不会创建新文件;而w+会截断文件的内容,并在该文件不存在时创建一个新文件。


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