RubyのFileクラスには複数の方法がありますが、おそらくFile.join
を使用することが最善の方法です。ドキュメント:
File :: SEPARATORを使用して文字列を結合した新しい文字列を返します。それをやって
File.join("usr", "mail", "gumby") #=> "usr/mail/gumby"
この方法は、それが現在実行中のOSに基づいて、ディレクトリとファイル名の間で使用するものを区切り自動感覚にルビーを可能にします。
あなた固定区切り文字を含む文字列、など
File.join('path/to', 'file.rb')
、あるいは完全にし、代わりにハードコードパスと使用文字列補間File.join
を使用してスキップ使用できます。
"path/to/#{filename}"
をが、コードはスマートではありません。 Rubyに夢中にさせることは常に良いことです。
Rubyは、Windowsシステムで実行しているときにスラッシュを自動的に許可するほどスマートですが、Windowsではバックスラッシュが必要です。 IO documentationはそれに入る: 可能であれば
Rubyは異なるオペレーティング・システムの規則間のパス名を変換します。たとえば、Windowsシステムでは、ファイル名 "/gumby/ruby/test.rb"が "\ gumby \ ruby \ test.rb"として開かれます。
File.join($PWD, 'source', 'blog')
:あなたのコードであなたのような何かができる、と述べているすべてで
"c:\\gumby\\ruby\\test.rb"
: はRubyの文字列内のWindowsスタイルのファイル名を指定する場合、 バックスラッシュをエスケープすることを忘れないでください私はRubyの機能を利用するために、あなたのコードを別に書くつもりです:
It ARGVは文字列を返すだけなので、ARGV[0].to_s
を使用する必要はありません。 values_at
は、指定インデックスの値をARGV
から取得できるようにします。より複雑なプログラムでは、より標準的なオプションフラグを使用できるOptionParserを使いたいでしょう。
Time.now
渡されたパラメータを指定せずにTime.new
と同じであるが、それはそれは、現在の時刻を返すだ、もう少し何が起こっているかの指標です。 new
は、新しいオブジェクトを作成していることを意味しますが、デフォルトが現在の時刻であることを暗示しません。これは微妙なことですが、可読性と保守性に役立ちます。
File.write(
file,
[
"---\n",
"title: #{title}",
"date: #{utctime}",
"tags:",
"description:",
"keywords:",
"shorttext:",
"---"
].join("\n")
)
File.write
は自動的にファイルを作成して上書きします。
生成しているファイルの内容を見ると、実際にYAMLファイルが作成されているように見えますが、ここでもRubyが助けてくれます。私たちは、外部起動されませんので、私はかなり、1はここFile.joinを使うべき理由を、表示されていない
require 'yaml'
title = 'the_title'
utctime = 'the_utctime'
foo = {
'title' => title,
'date' => utctime,
'tags' => nil,
'description' => nil,
'keywords' => nil,
'shorttext' => nil
}
puts foo.to_yaml
# >> ---
# >> title: the_title
# >> date: the_utctime
# >> tags:
# >> description:
# >> keywords:
# >> shorttext:
:ハッシュとYAMLのシリアライザを定義することは、適切な文字列を作成することができますプログラム。パス区切り文字としてバックスラッシュを使用すると、どのような利点がありますか?
利点は、バックスラッシュを使用すると、Windowsへのパスのみが制限されることです。 * nix(Mac OSを含む)は、スラッシュを使用します。 File.join
を使用すると、Rubyは現在のOSに応じて必要なものを判断できるため、コードは実行中のどこでも透過的に動作します。以前は、ほとんどの人が考えていなかったパス区切り文字には、一部のOSが:
を使用していました。それが起こった場合、Rubyは正しいことを続けなければなりません。
ファイルは通常、現在の作業ディレクトリに対して作成されるので、プレフィックスとして 'source/blog/...'はそのトリックを行うべきです。注意として、 'ARGV'の値は' nil'以外の文字列です。 – tadman
'$ PWD/source/blog'はすでに存在しますか? –