Criando um arquivo vazio em Ruby: equivalente a “toque”?


119

Qual é a melhor maneira de criar um arquivo vazio em Ruby?

Algo semelhante ao comando Unix, toque em :

touch file.txt

5
Você sempre pode fazer`touch file.txt`
Mark Thomas

8
@Mark: mesmo no windows?
Marc-André Lafortune

1
Pessoas que se preocupam com a programação independente de plataforma adequada? :-)
TJ Biddle

Respostas:


181

FileUtils.touchparece o que faz e espelha * o touchcomando:

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

* Ao contrário do touch (1), você não pode atualizar mtime ou atime sozinho. Também está faltando algumas outras opções interessantes.


@ 5chdn Você quer dizer sem os parênteses? Sim, os parênteses em torno dos parâmetros do método são (às vezes) opcionais.
Dave Newton

44

Se você está preocupado com os identificadores de arquivo:

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

Dos documentos :

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



-1

Apenas um exemplo:

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

1
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 :-)
sekmo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.