Rubyで空のファイルを作成する:「タッチ」相当?


回答:


180

FileUtils.touchそれが何をするかのように見え、コマンドをミラーリングします*touch

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

* touch(1)とは異なり、mtimeまたはatimeを単独で更新することはできません。また、他のいくつかの優れたオプションがありません。


@ 5chdn括弧がないと?はい、メソッドのパラメーターを囲む括弧は(場合によっては)オプションです。
Dave Newton、

44

ファイルハンドルが心配な場合:

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

ドキュメントから:

オプションのコードブロックを指定すると、開いているファイルが引数として渡され、ブロックが終了するとFileオブジェクトが自動的に閉じます。


おかげで、新しいファイルを別のプロセスに送信しているので、ハンドルをすぐに閉じる必要があります。
Abhi Beckert

12
これは実際にはミラーリングしないことを指摘する価値touchがあります-ファイルが存在する場合は上書きします。
MrTheWalrus 2013年

3
追加モードを使用すると、ファイルが既に存在する場合、ファイルは切り捨てられませんFile.open( "foo.txt"、 "a"){}これも 'touch'をミラーリングしませんが、 'touch(1)'は質問。
G.アレンモリスIII

「a」を使用しても、mtimeは更新されません。(「タッチ」がサブタイトルだったので、GoogleはRubyのタッチを求めている人々をもたらします。)
Martin Dorey 2013

* nixシステムでは、この方法で作成されたファイルの所有者は誰ですか?
Islam Azab



-1

ほんの一例:

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

1
これは、他のいくつかの言語のように、開いているファイルハンドルを残しますか?
Abhi Beckert

4
@Abhi:動作しますが、ガベージコレクションはある時点で処理します。それを避けるために、しかし、空のブロック(参照マイケル・コールズ答え)を渡す
マルク=アンドレ・Lafortune

「いつか」はいつ起こるのですか?スクリプトの最後、またはそれが変数に割り当てられていないためすぐに?ファイルを作成しているので、システム上の他のプロセスがすぐに作業を開始でき、ファイルハンドルがまだ書き込み用に開かれている場合はブロックされます。
Abhi Beckert

1
File.open( "foo.txt"、 "w")。close()はファイルハンドルの問題を解決しますが、FileUtils.touchがより良い解決策です。
マイケルキャンベル

そのような開いているファイルのハンドルをそのままにしないでください:-)
sekmo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.