Se o bloco de código opcional for fornecido, ele receberá o arquivo aberto como um argumento e o objeto File será fechado automaticamente quando o bloco terminar.
Obrigado, estou enviando o novo arquivo para outro processo, portanto, o identificador precisa ser fechado imediatamente.
Abhi Beckert
12
Vale a pena ressaltar que isso na verdade não espelha touch- ele sobrescreverá o arquivo se ele existir.
Mr TheWalrus
3
Use o modo anexar e o arquivo não será truncado se já existir File.open ("foo.txt", "a") {} Isso também não reflete 'touch', mas 'touch (1)' não era a questão.
G. Allen Morris III
Usar "a" não atualiza o mtime. ("toque" era o subtítulo, então o Google nos traz pessoas que querem um toque Ruby.)
Martin Dorey
em sistemas * nix, quem é o proprietário do arquivo quando ele é criado dessa forma?
Islam Azab
24
No Ruby 1.9.3+, você pode usar File.write(também conhecido como IO.write):
Isso deixa um identificador de arquivo aberto para trás, como faria em alguns outros idiomas?
Abhi Beckert
4
@Abhi: Sim, mas a coleta de lixo cuidará disso em algum momento. Para evitar isso, porém, passe um bloco vazio (ver a resposta de Michael Kohl)
Marc-André Lafortune
Quando "em algum ponto" vai acontecer? No final do script ou imediatamente porque não foi atribuído a nenhuma variável? Estou criando o arquivo para que outros processos no sistema possam começar a trabalhar com ele imediatamente, e eles serão bloqueados se o identificador de arquivo ainda estiver aberto para gravação.
Abhi Beckert
1
File.open ("foo.txt", "w"). Close () resolve o problema de manipulação de arquivos, mas FileUtils.touch é uma solução melhor.
Michael Campbell
Não deixe os identificadores de arquivos abertos assim :-)
`touch file.txt`
Respostas:
FileUtils.touch
parece o que faz e espelha * otouch
comando:* Ao contrário do touch (1), você não pode atualizar mtime ou atime sozinho. Também está faltando algumas outras opções interessantes.
fonte
Se você está preocupado com os identificadores de arquivo:
Dos documentos :
fonte
touch
- ele sobrescreverá o arquivo se ele existir.No Ruby 1.9.3+, você pode usar
File.write
(também conhecido comoIO.write
):Para a versão anterior,
require "backports/1.9.3/file/write"
ou useFile.open("foo.txt", "w") {}
fonte
E também, menos vantajoso, mas muito breve:
fonte
Apenas um exemplo:
fonte