web-dev-qa-db-ja.com

`File`オブジェクトのアクセスモードの違い(つまり、w +、r +)

Rubyでファイルを使用する場合、r+およびw+モード? a+モード?

53
Just a learner

http://www.tutorialspoint.com/Ruby/ruby_input_output.htm を参照してください

引用するには:

r
読み取り専用モード。ファイルポインターは、ファイルの先頭に配置されます。これがデフォルトのモードです。

r +
読み取り/書き込みモード。ファイルポインターは、ファイルの先頭にあります。

w
書き込み専用モード。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合、書き込み用の新しいファイルを作成します。

w +
読み取り/書き込みモード。 ファイルが存在する場合、既存のファイルを上書きします。ファイルが存在しない場合は、読み取りおよび書き込み用の新しいファイルを作成します。

a
書き込み専用モード。ファイルが存在する場合、ファイルポインターはファイルの末尾にあります。つまり、ファイルは追加モードです。ファイルが存在しない場合、書き込み用に新しいファイルを作成します。

a +
読み取りおよび書き込みモード。 ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。ファイルは追加モードで開きます。ファイルが存在しない場合は、読み取りおよび書き込み用の新しいファイルが作成されます。

(エンパシス鉱山。)

r +、w +、およびa +はすべて読み取り/書き込みを行います。 w +はファイルを切り捨てます。 a +を追加します。 w +とa +は両方ともファイルが存在しない場合は作成します。)

120

アクセスモードr+w+およびa+は、ファイルを読み取りおよび書き込みモードで開きますが、次の違いがあります。

r+はファイルの先頭から始まりますが、新しいファイルが存在しない場合は作成しません。

w+は、ファイルが存在する場合は既存のファイルをゼロ長に切り捨て、そうでない場合は新しいファイルを作成します。

a+は、ファイルが存在する場合はファイルの終わりから始まり、そうでない場合は新しいファイルを作成します。

11
user1134160

私自身の利益のために/参照のために:

|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
9

回答:r +とw +の両方でファイルの読み取り、書き込みはできますが、r +はファイルの内容を切り捨て(削除)しません。また、w +でファイルの内容を切り捨てるときにそのようなファイルが存在しない場合、新しいファイルを作成しませんそのようなファイルが存在しない場合は新しいファイルを作成します。

6
rishi