【发布时间】:2010-12-07 14:09:05
【问题描述】:
在 Ruby 中使用文件时,r+ 和 w+ 模式有什么区别? a+ 模式呢?
【问题讨论】:
在 Ruby 中使用文件时,r+ 和 w+ 模式有什么区别? a+ 模式呢?
【问题讨论】:
见http://www.tutorialspoint.com/ruby/ruby_input_output.htm
引用:
r
只读模式。文件指针位于文件的开头。这是默认模式。r+
读写模式。文件指针将位于文件的开头。w
只写模式。如果文件存在,则覆盖文件。如果文件不存在,则创建一个新文件进行写入。w+
读写模式。 如果文件存在,则覆盖现有文件。如果文件不存在,则新建一个文件进行读写。一个
只写模式。如果文件存在,则文件指针位于文件末尾。也就是说,文件处于附加模式。如果文件不存在,它会创建一个新文件进行写入。一个+
读写模式。 如果文件存在,则文件指针位于文件末尾。该文件以附加模式打开。如果文件不存在,则创建一个新文件进行读写。
(强调我的。)
r+、w+ 和 a+ 都可以读写。 w+ 截断文件。 a+ 附加。如果文件不存在,w+ 和 a+ 都会创建该文件。)
【讨论】:
w+ 表示附加的一些误解。
ruby documentation seem to agree with the fopen api But fail to obey it. 在a+的情况下
为了我自己的利益/仅供参考:
|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
【讨论】:
访问模式r+、w+和a+以读写模式打开文件,但有以下区别:
r+ 从文件开头开始,但如果文件不存在则不会创建新文件。
w+ 如果文件存在则将现有文件截断为零长度,否则创建一个新文件。
a+ 如果文件存在,则从文件末尾开始,否则创建一个新文件。
【讨论】:
回答: r+ 和 w+ 我们都可以在文件上读取、写入,但是 r+ 不会截断(删除)文件的内容,如果这样的文件没有退出,它也不会创建新文件,而在 w+ 中也会截断文件的内容如果这样的文件不存在,则创建一个新文件。
【讨论】: