`File` 对象访问模式的区别(即 w+, r+)
Posted
技术标签:
【中文标题】`File` 对象访问模式的区别(即 w+, r+)【英文标题】:Difference between the access modes of the `File` object (ie. w+, r+) 【发布时间】:2010-12-07 14:09:05 【问题描述】:在 Ruby 中使用文件时,r+
和 w+
模式有什么区别? a+
模式呢?
【问题讨论】:
【参考方案1】:见http://www.tutorialspoint.com/ruby/ruby_input_output.htm
引用:
r 只读模式。文件指针位于文件的开头。这是默认模式。
r+ 读写模式。文件指针将位于文件的开头。
w 只写模式。如果文件存在,则覆盖文件。如果文件不存在,则创建一个新文件进行写入。
w+ 读写模式。 如果文件存在,则覆盖现有文件。如果文件不存在,则新建一个文件进行读写。
一个 只写模式。如果文件存在,则文件指针位于文件末尾。也就是说,文件处于附加模式。如果文件不存在,它会创建一个新文件进行写入。
一个+ 读写模式。 如果文件存在,则文件指针位于文件末尾。该文件以附加模式打开。如果文件不存在,则创建一个新文件进行读写。
(强调我的。)
r+、w+ 和 a+ 都可以读写。 w+ 截断文件。 a+ 附加。如果文件不存在,w+ 和 a+ 都会创建该文件。)
【讨论】:
谢谢,您向我确认了w+
表示附加的一些误解。
@Jonathan Figland 请查看this
@Ratatouille 该问题似乎已关闭。那里的 cmets 似乎解决了主要问题。问题解决了吗?
@JonathanFingland 是的,问题已解决。我想在这里提到的是ruby documentation seem to agree with the fopen api But fail to obey it.
在a+的情况下【参考方案2】:
为了我自己的利益/仅供参考:
|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”符号怎么样?【参考方案3】:访问模式r+
、w+
和a+
以读写模式打开文件,但有以下区别:
r+
从文件开头开始,但如果文件不存在则不会创建新文件。
w+
如果文件存在则将现有文件截断为零长度,否则创建一个新文件。
a+
如果文件存在,则从文件末尾开始,否则创建一个新文件。
【讨论】:
【参考方案4】:回答: r+ 和 w+ 我们都可以在文件上读取、写入,但是 r+ 不会截断(删除)文件的内容,如果这样的文件没有退出,它也不会创建新文件,而在 w+ 中也会截断文件的内容如果这样的文件不存在,则创建一个新文件。
【讨论】:
以上是关于`File` 对象访问模式的区别(即 w+, r+)的主要内容,如果未能解决你的问题,请参考以下文章
python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)