Respostas:
The Ruby classe File irá dar-lhe os prós e contras de ::newe ::open, mas o seu pai, a classe IO , entra na profundidade de #reade #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.writesurgir 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.writeopçã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_sysopenmensagem 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' }