Diferencia entre los modos de acceso del objeto` File ' (es decir. w+, r+)


Cuando se usan archivos en Ruby, ¿cuál es la diferencia entre los modos r+ y w+? ¿Qué pasa con el modo a+?

Author: Josh Voigts, 2009-10-17

4 answers

Véase http://www.tutorialspoint.com/ruby/ruby_input_output.htm

Para citar:

R
Modo de solo lectura. El puntero del archivo se coloca al principio del archivo. Este es el modo predeterminado.

R +
Modo lectura-escritura. El puntero del archivo estará al principio del archivo.

W
Modo de solo escritura. Sobrescribe el archivo si el archivo existe. Si el archivo no existe, crea un nuevo archivo para escribir.

W +
Modo lectura-escritura. Sobrescribe el archivo existente si el archivo existe. Si el archivo no existe, crea un nuevo archivo para leer y escribir.

A
Modo de solo escritura. El puntero de archivo al final del archivo si el archivo existe. Es decir, el archivo está en el modo append. Si el archivo no existe, crea un nuevo archivo para escribir.

A +
Modo de lectura y escritura. El puntero del archivo está al final del archivo si el archivo existe. El archivo se abre en el modo append. Si el archivo no existe, crea un nuevo archivo para leer y escribir.

(empshasis mine.)

R+, w+ y a+ todos hacen lectura-escritura. w+ trunca el archivo. a + anexa. w + y a+ crean el archivo si no existe.)

 112
Author: Jonathan Fingland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-17 07:49:27

Modos de accesor+, w+ y a+ abre el archivo en modo de lectura y escritura , pero con la siguiente diferencia:

r+ comienza al principio del archivo, pero no creará un nuevo archivo si no existe.

w+ trunca el archivo existente a la longitud cero si el archivo existe, de lo contrario crea un nuevo archivo.

a+ comienza al final del archivo si el archivo existe, de lo contrario crea un nuevo archivo.

 10
Author: FallenAngel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-06 13:37:20

Respuesta: Tanto r + como w + podemos leer, escribir en el archivo, pero r + no trunca (elimina) el contenido del archivo, así que no crea un nuevo archivo si dicho archivo no sale, mientras que en w+ trunca el contenido del archivo, así como crear un nuevo archivo si dicho archivo no existe.

 6
Author: rishi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-20 21:00:46

Para mi propio beneficio / para fines de referencia:

|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
 6
Author: Paul van Leeuwen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-04 08:51:07