Tworzenie pustego pliku w Rubim: odpowiednik „dotykowego”?


119

Jaki jest najlepszy sposób na utworzenie pustego pliku w Rubim?

Coś podobnego do polecenia Unix, dotknij :

touch file.txt

5
Zawsze możesz to zrobić`touch file.txt`
— Mark Thomas

8
@Mark: nawet w systemie Windows?
— Marc-André Lafortune

1
Osoby, którym zależy na poprawnym programowaniu niezależnym od platformy? :-)
— TJ Biddle

Odpowiedzi:


181

FileUtils.touchWygląda na to, co robi, i lusterka * z touchpolecenia:

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

* W przeciwieństwie do touch (1) , nie możesz aktualizować samego czasu ani atime. Brakuje też kilku innych fajnych opcji.


@ 5chdn Masz na myśli bez parens? Tak, parens wokół parametrów metody są (czasami) opcjonalne.
— Dave Newton,

44

Jeśli martwisz się o uchwyty plików:

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

Z dokumentów :

Jeśli podano opcjonalny blok kodu, zostanie przekazany otwarty plik jako argument, a obiekt File zostanie automatycznie zamknięty po zakończeniu bloku.


Dzięki, wysyłam nowy plik do innego procesu, więc uchwyt musi zostać natychmiast zamknięty.
— Abhi Beckert,

12
Warto zwrócić uwagę, że w rzeczywistości nie jest to kopia lustrzana touch- nadpisze plik, jeśli istnieje.
— MrTheWalrus

3
Użyj trybu dopisywania, a plik nie zostanie obcięty, jeśli już istnieje File.open ("foo.txt", "a") {} To również nie odzwierciedla 'dotknięcia', ale wtedy 'touch (1)' nie został pytanie.
— G. Allen Morris III,

Użycie „a” nie aktualizuje czasu mtime. („dotyk” był podtytułem, więc Google dostarcza nam ludzi, którzy chcą dotknąć Ruby.)
— Martin Dorey

w systemach * nix, kto jest właścicielem pliku, gdy jest on tworzony w ten sposób?
— Islam Azab,



-1

Tylko przykład:

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

1
Czy powoduje to pozostawienie otwartego uchwytu pliku, tak jak w niektórych innych językach?
— Abhi Beckert

4
@Abhi: Tak, ale czyszczenie pamięci w pewnym momencie sobie z tym poradzi. Aby jednak tego uniknąć, przejdź przez pusty blok (patrz odpowiedź Michaela Kohla)
— Marc-André Lafortune,

Kiedy „w którymś momencie” się wydarzy? Na końcu skryptu, czy od razu, ponieważ nie został on przypisany do żadnej zmiennej? Tworzę plik, aby inne procesy w systemie mogły rozpocząć z nim pracę natychmiast i zostaną zablokowane, jeśli uchwyt pliku jest nadal otwarty do zapisu.
— Abhi Beckert,

1
File.open ("foo.txt", "w"). Close () rozwiązuje problem z uchwytem pliku, ale FileUtils.touch jest lepszym rozwiązaniem.
— Michael Campbell

Nie zostawiaj otwartych uchwytów plików w ten sposób :-)
— sekmo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.