web-dev-qa-db-fra.com

Différence entre les modes d'accès de l'objet `File` (ie. W +, r +)

Lors de l'utilisation de fichiers dans Ruby, quelle est la différence entre le r+ et w+ modes? Que dire de la a+ mode?

53
Just a learner

Voir http://www.tutorialspoint.com/Ruby/ruby_input_output.htm

Citer:

r
Mode lecture seule. Le pointeur de fichier est placé au début du fichier. Il s'agit du mode par défaut.

r +
Mode lecture-écriture. Le pointeur de fichier sera au début du fichier.

w
Mode écriture seule. Remplace le fichier s'il existe. Si le fichier n'existe pas, crée un nouveau fichier pour l'écriture.

w +
Mode lecture-écriture. Remplace le fichier existant s'il existe. Si le fichier n'existe pas, crée un nouveau fichier pour la lecture et l'écriture.

une
Mode écriture seule. Le pointeur de fichier se trouve à la fin du fichier s'il existe. Autrement dit, le fichier est en mode ajout. Si le fichier n'existe pas, il crée un nouveau fichier pour l'écriture.

a +
Mode lecture et écriture. Le pointeur de fichier se trouve à la fin du fichier s'il existe. Le fichier s'ouvre en mode ajout. Si le fichier n'existe pas, il crée un nouveau fichier pour la lecture et l'écriture.

(Souligne le mien.)

r +, w + et a + sont tous en lecture-écriture. w + tronque le fichier. a + s'ajoute. w + et a + créent tous deux le fichier s'il n'existe pas.)

120
Jonathan Fingland

Modes d'accès r+, w+ et a+ ouvre le fichier en mode lecture et écriture, mais avec la différence suivante:

r+ commence au début du fichier, mais ne créera pas de nouveau fichier s'il n'existe pas.

w+ tronque le fichier existant à une longueur nulle si le fichier existe, sinon crée un nouveau fichier.

a+ commence à la fin du fichier si le fichier existe, sinon crée un nouveau fichier.

11
user1134160

Pour mon propre bénéfice/à des fins de référence:

|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
Paul van Leeuwen

Réponse: à la fois r + et w +, nous pouvons lire, écrire sur le fichier mais r + ne tronque pas (supprime) le contenu du fichier et ne crée pas de nouveau fichier si un tel fichier ne se termine pas en w + tronque le contenu du fichier ainsi que créer un nouveau fichier si ce fichier n'existe pas.

6
rishi