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.