2012-12-05 1 views
0

Supposons que vous receviez un objet ouvert File, mais vous ne savez pas dans quel type de mode il a été ouvert (par exemple 'r', 'w', 'w +').Comment tester le type de mode dans lequel un fichier Ruby a été ouvert?

Comment déterminer le mode d'ouverture du fichier? Pour autant que je sache, il n'y a pas de méthode IO pour cela, mais je pourrais manquer quelque chose.

S'il est nécessaire d'écrire un test individuel pour chaque mode, alors idéalement ce serait une seule instruction if qui ne modifierait pas la position du pointeur (ou le contenu du fichier).

+0

Le seul que je connais est 'IO # binmode?'; Je n'ai aucune idée de l'écriture/lecture, sauf par des tests d'exception comme le conseille @ Arcturus. – Amadan

Répondre

2

Vous pouvez essayer une de:

  • Ecrire un caractère unique au descripteur de fichier, puis unseek arrière; Si vous réussissez, vous êtes en mode écriture, sinon vous déclenchez une exception. Essayez la méthode fstat.

+0

juste pour être sûr, par 'fstat' voulez-vous dire [File :: stat] (http://www.ruby-doc.org/core-1.9.3/File.html#method-c-stat)? – webdesserts

+0

Je ne suis pas sûr de l'appel de la fonction Ruby exacte; fstat() est l'appel système qui fait la même chose que stat() mais avec des descripteurs de fichiers, par opposition aux noms de fichiers. – Arcturus

-1

L'objet fichier Ruby a les méthodes suivantes:

File(filename).readable? 
File(filename).writeable? 
File(filename).executeable? 
+2

A ma connaissance les 'lisibles?' Et '' inscriptibles? Teste si l'utilisateur dispose des autorisations, et non si un objet spécifique a été ouverte avec 'dire File.open (« testfile.txt » « w + »)'. Corrigez-moi si je me trompe. – webdesserts

+0

@mcmullins: Vous n'avez pas tort sur ce point. – Amadan

Questions connexes