Créer un fichier vide dans Ruby: équivalent «tactile»?


119

Quelle est la meilleure façon de créer un fichier vide dans Ruby?

Quelque chose de similaire à la commande Unix, touchez :

touch file.txt

5
Vous pouvez toujours faire`touch file.txt`
Mark Thomas

8
@Mark: même sous Windows?
Marc-André Lafortune

1
Des gens qui se soucient d'une programmation appropriée indépendante de la plate-forme? :-)
TJ Biddle

Réponses:


181

FileUtils.touchressemble à ce qu'il fait et reflète * la touchcommande:

require 'fileutils'
FileUtils.touch('file.txt')

* Contrairement à touch (1), vous ne pouvez pas mettre à jour mtime ou atime seul. Il manque également quelques autres options intéressantes.


@ 5chdn Vous voulez dire sans les parents? Oui, les parenthèses autour des paramètres de méthode sont (parfois) facultatives.
Dave Newton

44

Si vous vous inquiétez des descripteurs de fichiers:

File.open("foo.txt", "w") {}

À partir de la documentation :

Si le bloc de code optionnel est donné, le fichier ouvert lui sera transmis comme argument, et l'objet File sera automatiquement fermé lorsque le bloc se terminera.


Merci, j'envoie le nouveau fichier à un autre processus, donc le handle doit être fermé immédiatement.
Abhi Beckert

12
Il convient de souligner que cela ne reflète pas réellement touch- il écrasera le fichier s'il existe.
MrTheWalrus

3
Utilisez le mode ajout et le fichier ne sera pas tronqué s'il existe déjà File.open ("foo.txt", "a") {} Cela ne reflète pas non plus 'touch', mais alors 'touch (1)' ne l'était pas la question.
G.Allen Morris III

L'utilisation de "a" ne met pas à jour le mtime. ("touch" était le sous-titre, donc Google nous amène des gens qui veulent une touche Ruby.)
Martin Dorey

sur les systèmes * nix, qui est le propriétaire du fichier lorsqu'il est créé de cette façon?
Islam Azab


2

Et aussi, moins avantageux, mais très bref:

`touch file.txt`

3
Will fourchettes prix séparés, donc est très lent.
denis.peplin

Et est déjà mentionné dans les commentaires, ce que je n'ai pas remarqué plus tôt.
Boris Stitnicky

-1

Juste un exemple:

File.open "foo.txt", "w"

1
Cela laisse-t-il un descripteur de fichier ouvert, comme il le ferait dans d'autres langues?
Abhi Beckert

4
@Abhi: Oui, mais le garbage collection le gérera à un moment donné. Pour éviter cela, passez un bloc vide (voir la réponse de Michael Kohl)
Marc-André Lafortune

Quand "à un moment donné" va-t-il se produire? À la fin du script, ou immédiatement parce qu'il n'a été affecté à aucune variable? Je crée le fichier pour que les autres processus du système puissent commencer à travailler avec lui immédiatement, et ils seront bloqués si le descripteur de fichier est toujours ouvert pour l'écriture.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () résout le problème du gestionnaire de fichiers, mais FileUtils.touch est une meilleure solution.
Michael Campbell

Ne laissez pas les poignées de fichiers ouvertes comme ça :-)
sekmo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.