Difference between the access modes of the `File` object (ie. w+, r+)

50,936

Solution 1

See http://www.tutorialspoint.com/ruby/ruby_input_output.htm

To quote:

r
Read-only mode. The file pointer is placed at the beginning of the file. This is the default mode.

r+
Read-write mode. The file pointer will be at the beginning of the file.

w
Write-only mode. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing.

w+
Read-write mode. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing.

a
Write-only mode. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing.

a+
Read and write mode. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing.

(empshasis mine.)

r+, w+, and a+ all do read-write. w+ truncates the file. a+ appends. w+ and a+ both create the file if it does not exist.)

Solution 2

For my own benefit / for reference purposes:

|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

Solution 3

Answer: Both r+ and w+ we can read ,write on file but r+ does not truncate (delete) the content of file as well it doesn’t create a new file if such file doesn’t exits while in w+ truncate the content of file as well as create a new file if such file doesn’t exists.

Share:
50,936
Just a learner
Author by

Just a learner

Updated on July 08, 2022

Comments

  • Just a learner
    Just a learner almost 2 years

    When using files in Ruby, what is the difference between the r+ and w+ modes? What about the a+ mode?

  • akostadinov
    akostadinov almost 10 years
    Thanks, you are confirming for me that there is some misconception that w+ means append.
  • Ratatouille
    Ratatouille about 7 years
    @Jonathan Figland Please check this
  • Pradeep Kumar
    Pradeep Kumar about 7 years
    @Ratatouille That Question appears to have been closed. The comments there appear to address the main problems. Is the issue resolved?
  • Ratatouille
    Ratatouille about 7 years
    @JonathanFingland Yes the issue is resolved. What I wanted to mention over here is that ruby documentation seem to agree with the fopen api But fail to obey it. in case of a+
  • user1767316
    user1767316 over 3 years
    what about the "&:read" notation for w+ and others?