`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+)的主要内容,如果未能解决你的问题,请参考以下文章

io操作-文件

python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)

python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)

python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)

PythonFile对象的属性

python 读写文件中 w与wt ; r与rt 的区别