Odpowiedzi:
Klasa Ruby File da ci tajniki ::new
i, ::open
ale jej rodzic, klasa IO , wchodzi w głębokość #read
i #write
.
Czy szukasz następujących rzeczy?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
to zmienna przechowująca nazwę pliku do zapisania.
f.write
pojawił się wyjątek.
File.write('filename', 'content')
IO.write('filename', 'content')
Możesz użyć krótkiej wersji:
File.write('/path/to/file', 'Some glorious content')
Zwraca zapisaną długość; zobacz :: napisz po więcej szczegółów i opcji.
Aby dołączyć do pliku, jeśli już istnieje, użyj:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Jest to preferowane podejście w większości przypadków:
File.open(yourfile, 'w') { |file| file.write("your text") }
Po przekazaniu bloku File.open
obiekt File zostanie automatycznie zamknięty po jego zakończeniu.
Jeśli nie przekażesz bloku File.open
, musisz upewnić się, że plik jest poprawnie zamknięty, a treść została zapisana w pliku.
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
Można go znaleźć w dokumentacji :
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/… jest również wspomniany w oficjalnej dokumentacji
Znaleziona tutaj odpowiedź Zambri jest najlepsza.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
gdzie twoje opcje <OPTION>
to:
r
- Tylko czytać. Plik musi istnieć.
w
- Utwórz pusty plik do pisania.
a
- Dołącz do pliku. Plik zostanie utworzony, jeśli nie istnieje.
r+
- Otwórz plik, aby zaktualizować zarówno odczyt, jak i zapis. Plik musi istnieć.
w+
- Utwórz pusty plik do odczytu i zapisu.
a+
- Otwórz plik do odczytu i dołączenia. Plik zostanie utworzony, jeśli nie istnieje.
W twoim przypadku w
jest preferowane.
Dla tych z nas, którzy uczą się na przykładach ...
Napisz tekst do pliku takiego jak ten:
IO.write('/tmp/msg.txt', 'hi')
INFORMACJE O BONUSIE ...
Przeczytaj to w ten sposób
IO.read('/tmp/msg.txt')
Często chcę czytać plik w moim schowku ***
Clipboard.copy IO.read('/tmp/msg.txt')
A innym razem chcę zapisać zawartość mojego schowka do pliku ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Zakłada, że masz zainstalowany klejnot schowka
IO.write
opcja zastępowania zawartości pliku zamiast dołączania. Dołącz z IO.write jest trochę nudne.
Errno::ENOENT: No such file or directory @ rb_sysopen
komunikat i plik utworzony o rozmiarze 0 bajtów.
Aby zniszczyć poprzednią zawartość pliku, wpisz nowy ciąg do pliku:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Aby dołączyć do pliku bez nadpisywania jego starej zawartości:
open('myfile.txt', "a") { |f| f << 'I am appended string' }