Tạo một tệp trống trong Ruby: tương đương “touch”?


119

Cách tốt nhất để tạo một tệp trống trong Ruby là gì?

Một cái gì đó tương tự như lệnh Unix, chạm vào :

touch file.txt

5
Bạn luôn có thể làm được`touch file.txt`
Mark Thomas

8
@Mark: ngay cả trên windows?
Marc-André Lauckyne 11/11/11

1
Những người quan tâm đến lập trình độc lập với nền tảng thích hợp? :-)
TJ Biddle

Câu trả lời:


181

FileUtils.touchtrông giống như những gì nó làm, và gương * các touchlệnh:

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

* Không giống như touch (1), bạn không thể cập nhật mtime hoặc atime một mình. Nó cũng thiếu một vài tùy chọn tốt đẹp khác.


@ 5chdn Ý bạn là không có parens? Có, parens xung quanh các tham số phương thức (đôi khi) là tùy chọn.
Dave Newton

44

Nếu bạn lo lắng về việc xử lý tệp:

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

Từ các tài liệu :

Nếu khối mã tùy chọn được đưa ra, nó sẽ được chuyển sang tệp đã mở làm đối số và đối tượng Tệp sẽ tự động bị đóng khi khối kết thúc.


Cảm ơn, tôi đang gửi tệp mới tới một quy trình khác, vì vậy cần đóng xử lý ngay lập tức.
Abhi Beckert

12
Đáng chỉ ra rằng điều này không thực sự phản chiếu touch- nó sẽ ghi đè lên tệp nếu nó tồn tại.
MrTheWalrus

3
Sử dụng chế độ nối thêm và tệp sẽ không bị cắt ngắn nếu nó đã tồn tại File.open ("foo.txt", "a") {} Điều này cũng không phản ánh 'touch', nhưng khi đó 'touch (1)' thì không câu hỏi.
G. Allen Morris III

Sử dụng "a" không cập nhật mtime. ( "chạm" là phụ đề, do đó, Google mang đến cho chúng ta những người muốn một Ruby cảm ứng.)
Martin Dorey

trên hệ thống * nix, Ai là chủ sở hữu tệp khi tệp được tạo theo cách này?
Islam Azab


2

Và ngoài ra, ít thuận lợi hơn, nhưng rất ngắn gọn:

`touch file.txt`

3
Sẽ tách riêng pricess, vì vậy rất chậm.
denis.peplin

Và đã được đề cập trong các bình luận, mà tôi đã không nhận thấy trước đó.
Boris Stitnicky

-1

Chỉ là một ví dụ:

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

1
Điều này có để lại một quá trình xử lý tệp đang mở, giống như ở một số ngôn ngữ khác?
Abhi Beckert

4
@Abhi: Đúng vậy, nhưng việc thu gom rác sẽ xử lý nó vào một lúc nào đó. Để tránh điều đó, tuy nhiên, vượt qua một khối rỗng (Xem Michael Kohl của câu trả lời)
Marc-André Lafortune

Khi nào thì "một lúc nào đó" sẽ xảy ra? Ở cuối tập lệnh, hoặc ngay lập tức vì nó chưa được gán cho bất kỳ biến nào? Tôi đang tạo tệp để các quy trình khác trên hệ thống có thể bắt đầu làm việc với nó ngay lập tức và chúng sẽ bị chặn nếu trình xử lý tệp vẫn đang mở để ghi.
Abhi Beckert

1
File.open ("foo.txt", "w"). Close () giải quyết vấn đề xử lý tệp, nhưng FileUtils.touch là giải pháp tốt hơn.
Michael Campbell

Đừng để các tệp đang mở xử lý như vậy :-)
sekmo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.