WindowsとLinuxで動作するアプリケーションを作成したいと思います。私はこの問題を解決することができますが、Windowsは "\"とLinux use "/"を使用するため、パスの問題があります。 おかげRubyのスラッシュとバックスラッシュ
答えて
はFile.joinを見てみましょう:Rubyでhttp://www.ruby-doc.org/core/classes/File.html#M000031
を、LinuxまたはWindowsでのパスの間に違いはありません。環境にかかわらず、パスは/
を使用する必要があります。したがって、Windowsで任意のパスを使用する場合は、\
をすべて/
に置き換えてください。 File#join
は、WindowsとLinuxの両方で動作します。たとえば、Windowsで:
Dir.pwd
=> "C/Documents and Settings/Users/prince"
File.open(Dir.pwd + "/Desktop/file.txt", "r")
=> #<File...>
File.open(File.join(Dir.pwd, "Desktop", "file.txt"), "r")
=> #<File...>
File.join(Dir.pwd, "Desktop", "file.txt")
=> "C/Documents and Settings/Users/prince/Desktop/file.txt"
これは、外部コマンドを実行する場合にのみ機能します。 – Automatico
...窓には何も意味を持たない//?/に変換される\\?\(パス> 260バイトに必要な)のような特別な接頭辞があります...だから、この機能は実際にはバグの犠牲者です – estani
@estani私はそれが機能だとは言わなかった。私は 'File.join'と言って、実際には環境にかかわらずすべてのパスを'/'で区切っています。これはルビでパスがどのように表現されているかを示しています。ファイルを初期化するときにファイルパスにWindowsの場合でも '/'を使用する必要があります。 – rubyprince
は、あなたのシステムに正しいはずのパスを生成するPathname
クラスを使用します。
a_path = Pathname.new("a_path_goes_here")
この利点は、それがでチェーンディレクトリにあなたをできるようにするということですa_path.to_s
は、あなたがオンになっているシステムの正しいパスを生成します呼び出す
a_path + "another_path" + "and another"
:+
演算子を使用。
巨大なWeb開発フレームワークで動作している場合を除き、 "pathname"が必要なことを忘れないでください。 –
これは、私が何かが見つからない限り、Windows上のRuby 2.0.0では機能しません: p = Pathname.new p = p + "apple" + "banana" puts p.to_s < "apple/banana" –
代わりにFile.joinを使用すると、pathnameよりも簡単で迷惑にならず、うまくいきます。 – shevy
あなたは特に、コマンドラインまたはファイルのアップロードのようなもので、いくつかの他のプログラムが使用するパスを送るようにしたら限りRubyは仕事をしているように、パス名に/
は、Windows
にokですブラウザでは、Windowsで実行しているときにスラッシュをバックスラッシュに変換する必要があります。
C:/projects/a_project/some_file.rb'.gsub('/', '\\')
は魅力的です。 (これは二重バックスラッシュであると考えられています - このエディタは一重引用符でもエスケープとみなします)
Rubyのコントロールからパス名の文字列を送信する直前にこのような方法を使用します。
プログラムが実行されていることをプログラムが認識していることを確認して、いつ実行する必要があるかを判断する必要があります。一つの方法は、プログラムの実行の開始時に、この
::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))
のようなものを定数を設定することです(私はこの作品を知っているが、私は二重の強打を理解していないので、私はそれを書いていません。.. 。)
私は '!!'がそれをブール値に変換すると信じています。 Rubyでは、trueは通常、非nilまたはfalseでないオブジェクトとして返されます(あなたの場合はMatchオブジェクトを取得します)。 '!'はオブジェクトを 'false'に変換し、2番目の'! 'は' true'に変換します。 –
はい、ファイル管理者にコピーするためのパスが必要な場合は、バックスラッシュをスラッシュに置き換えておくことは迷惑です。 LinuxやMacでWindowsに迷惑をかけても問題ありません。
path = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')
Dir.glob("#{path}/**/*.epub").each do |file|
puts file
end
- 1. Rspecの前方スラッシュとバックスラッシュ
- 2. UNIX/Windowsでのスラッシュとバックスラッシュの一貫性
- 3. SQLiteは、私はsqliteの中のクエリとスラッシュでバックスラッシュを交換する必要がスラッシュ
- 4. スラッシュの前にバックスラッシュを追加するPHPコード
- 5. バックスラッシュでパスを分割し、スラッシュで結合します。
- 6. XMLHttpRequestは自動的にバックスラッシュ(\)をスラッシュ(/)に置き換えます。
- 7. スラッシュをバックスラッシュに置き換える方法
- 8. Apache .htaccess:Firefoxでバックスラッシュをスラッシュに書き換える方法は?
- 9. javascriptでバックスラッシュをスラッシュ正規表現に置き換えます。
- 10. Ruby JSON Parse Strippingエスケープされたバックスラッシュ(ストリング)
- 11. どのようにスラッシュでバックスラッシュを置き換えるために - Pythonの
- 12. Visual Studioがスラッシュをバックスラッシュに置き換えるのはなぜですか?
- 13. mod_rewriteのApacheとバックスラッシュ
- 14. は、バックスラッシュとスペース
- 15. フォワードスラッシュとバックスラッシュphp
- 16. バックスラッシュをスラッシュに変換するには、javaを使用します。
- 17. TRを使ってバックスラッシュをスラッシュに変換するGitエイリアスを設定する
- 18. Appcmdはバックスラッシュをスラッシュに置き換え、回避する方法は?
- 19. Rubyでこのバックスラッシュを削除するには
- 20. Ecapeは単一のバックスラッシュと二重のバックスラッシュを残す
- 21. クエリでスラッシュ/スラッシュを検索すると
- 22. ダブルバックスラッシュとString.replaceAll単一のバックスラッシュ
- 23. PHPと文字列のバックスラッシュ
- 24. バックスラッシュ「\」
- 25. Luceneとスラッシュ
- 26. Ruby Mysql2クライアントが挿入中にバックスラッシュを使用しない
- 27. Rubyで逆スラッシュの文字列を印刷するには
- 28. 正規表現とバックスラッシュ
- 29. 二重のバックスラッシュ(\\)
- 30. バックスラッシュのpython
"join"メソッドがLinux用のようですTウィンドウ用の結合メソッドを使用するにはどうしたらいいですか? –
あなたのプラットフォームに応じて、 'File.join'は\や/をセパレータとして使います。 – Wukerplank
実際に 'File.join'はWindowsでも'/'を使います。 – dubek