ダウンロード ディレクトリを指定するにはどうすればよいですか? 私はこれを試しました:
open("D:\Downloads" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
しかし、うまくいきません。ファイルがどのディレクトリにロードされているかさえわかりません。
あなたの道をよく引用してください。また、別のものを追加する必要があると思います\
:
open("D:\\Downloads\\" + filename, 'wb') do |io|
response.read_body do |chunk|
io.write chunk
end
end
File クラスの機能split
とjoin
パスを利用します。
open(File.join("D:/Downloads", filename), 'wb')
join
パス区切り記号を認識しておりsplit
、正しいことを行います。
例えば:
filename = 'foo'
"D:\Downloads" + filename # => "D:Downloadsfoo"
File.join("D:\Downloads", filename) # => "D:Downloads/foo"
Ruby では、Windows のファイル名に逆スラッシュ (バックスラッシュ) を使用する必要はありません。Ruby は、コードが Windows で実行されていることを認識し、必要に応じてスラッシュから逆スラッシュに自動的に変換するほどスマートです。
IO ドキュメントを参照してください。
Ruby は、可能であれば、異なるオペレーティング システムの規則間でパス名を変換します。たとえば、Windows システムでは、ファイル名「/gumby/ruby/test.rb」は「\gumby\ruby\test.rb」として開かれます。Ruby 文字列で Windows スタイルのファイル名を指定するときは、必ずバックスラッシュをエスケープしてください。
"c:\\gumby\\ruby\\test.rb"
ここでの例では、Unix スタイルのスラッシュを使用します。File::ALT_SEPARATOR を使用して、プラットフォーム固有の区切り文字を取得できます。
では、上記の を使用するサンプル コードを見てくださいFile.join
。Ruby の二重引用符で囲まれた文字列がエラーでエスケープしようとして解釈"D:\Downloads"
されるため、 which gets convert を使用しています。その結果、Ruby は単一のバックスラッシュを削除して. 逆スラッシュを使用する必要がないことを認識することで、問題が完全に取り除かれ、書くことができ、あなたと Ruby が幸せになります。D:Downloads
\D
D
"D:Downloads"
"D:/Downloads"
別の方法として、 のような単一引用符を使用することもできます'D:\Downloads'
。これは、Ruby が喜んで受け入れ、 を意味することを理解していたD:\\Downloads
でしょう。
「一重引用符で囲まれた文字列と二重引用符で囲まれた文字列のバックスラッシュ」は、追加の読み物として役立ちます。