Respostas:
The Ruby classe File irá dar-lhe os prós e contras de ::new
e ::open
, mas o seu pai, a classe IO , entra na profundidade de #read
e #write
.
Você está procurando o seguinte?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
é uma variável que contém o nome do arquivo a ser gravado.
f.write
surgir uma exceção.
File.write('filename', 'content')
IO.write('filename', 'content')
Você pode usar a versão curta:
File.write('/path/to/file', 'Some glorious content')
Retorna o comprimento escrito; veja :: write para mais detalhes e opções.
Para anexar ao arquivo, se ele já existir, use:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Essa é a abordagem preferida na maioria dos casos:
File.open(yourfile, 'w') { |file| file.write("your text") }
Quando um bloco é passado para File.open
, o objeto File será automaticamente fechado quando o bloco terminar.
Se você não passar um bloco para File.open
, deve certificar-se de que o arquivo esteja corretamente fechado e que o conteúdo foi gravado no arquivo.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Você pode encontrá-lo na documentação :
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
File.open
blog.rubybestpractices.com/posts/rklemme/… também são mencionadas na documentação oficial
A resposta de Zambri encontrada aqui é a melhor.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
onde suas opções <OPTION>
são:
r
- Somente leitura. O arquivo deve existir.
w
- Crie um arquivo vazio para escrever.
a
- Anexar a um arquivo. O arquivo é criado se ele não existir.
r+
- Abra um arquivo para atualizar a leitura e a gravação. O arquivo deve existir.
w+
- Crie um arquivo vazio para leitura e gravação.
a+
- Abra um arquivo para ler e anexar. O arquivo é criado se não existir.
No seu caso, w
é preferível.
Para aqueles de nós que aprendem pelo exemplo ...
Escreva texto em um arquivo como este:
IO.write('/tmp/msg.txt', 'hi')
INFORMAÇÕES BÔNUS ...
Leia de volta assim
IO.read('/tmp/msg.txt')
Freqüentemente, quero ler um arquivo na minha área de transferência ***
Clipboard.copy IO.read('/tmp/msg.txt')
E outras vezes, quero gravar o que está na minha área de transferência em um arquivo ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Supõe que você tenha a jóia da área de transferência instalada
IO.write
opção substituir o conteúdo do arquivo em vez de acrescentar. Anexar com IO.write é um pouco entediante.
Errno::ENOENT: No such file or directory @ rb_sysopen
mensagem e o arquivo criado com um tamanho de 0 bytes.
Para destruir o conteúdo anterior do arquivo, escreva uma nova string no arquivo:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Para acrescentar a um arquivo sem substituir o conteúdo antigo:
open('myfile.txt', "a") { |f| f << 'I am appended string' }