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
24
Dans Ruby 1.9.3+, vous pouvez utiliser File.write(aka IO.write):
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 :-)
`touch file.txt`
Réponses:
FileUtils.touch
ressemble à ce qu'il fait et reflète * latouch
commande:* Contrairement à touch (1), vous ne pouvez pas mettre à jour mtime ou atime seul. Il manque également quelques autres options intéressantes.
la source
Si vous vous inquiétez des descripteurs de fichiers:
À partir de la documentation :
la source
touch
- il écrasera le fichier s'il existe.Dans Ruby 1.9.3+, vous pouvez utiliser
File.write
(akaIO.write
):Pour la version antérieure, soit
require "backports/1.9.3/file/write"
ou utilisezFile.open("foo.txt", "w") {}
la source
Et aussi, moins avantageux, mais très bref:
la source
Juste un exemple:
la source