2016-10-06 13 views
1

windowsマシンの特定の拡張子のファイルのリストを取得するためにディレクトリ名のユーザ入力を使用する次のコードでは問題がありますruby​​ - ディレクトリから特定の拡張子のファイルを取得する(windows)

puts "Enter the name of directory where files exist : " 
directory = gets.chomp 
csv_files = Dir.glob("#{directory}/*.csv") 

ディレクトリ入力に関係なく(ディレクトリには.csvファイルがあります)、最後の行は空の配列を返します。

ルビーバージョン - ruby 2.0.0p598 (2014-11-13) [i386-mingw32]

コメント

PS C:\test> irb 
irb(main):001:0> directory = gets.chomp 
C:\test 
=> "C:\\test" 
irb(main):002:0> directory 
=> "C:\\test" 
irb(main):003:0> Dir.glob("#{directory}/*.csv") 
=> [] 

irb(main):004:0> Dir.glob("#{directory}/*.*") 
=> [] 

irb(main):005:0> Dir.glob("C:/" + directory + "/*.csv") 
=> [] 

irb(main):006:0> Dir.glob("C:/test/*") 
=> ["C:/test/test_csv.csv"] 

irb(main):007:0> Dir.entries(directory) 
=> [".", "..","test_csv.csv"] 

irb(main):010:0> Dir.glob('./*.csv') 
=> ["./test_csv.csv"] 
irb(main):011:0> 
+0

入力ディレクトリの様子は? globパターンをDir.glob( "#{directory} /*.*")に変更すると、別のものが返されますか? – rpepato

+0

入力ディレクトリは 'C:\ test'のように見え、' .csv'拡張子のファイルがいくつかあります。パターンを 'Dir.glob("#{directory} /*.* ")'に変更すると空の配列が返されます。 – user3206440

+0

'Dir.glob(" C:/ "+ directory +"/*。csv ")は動作しますか? – Kelseydh

答えて

0

に尋ねた追加情報を追加するには、以下のような解決策を見つけました。

File.expand_pathメソッドを使用して、入力文字列を標準のルビファイルパスに変換します。

puts "Enter the name of directory where files exist : " 
directory = File.expand_path(gets.chomp) 
csv_files = Dir.glob("#{directory}/*.csv") 
+0

このソリューションには、相対パスを絶対パスにする副作用があります。これは必ずしもあなたがしたいことではありません。別の方法として、バックスラッシュを単にスラッシュ( 'gets '。'、'/') ')で置き換える方法があります。 – user1934428

関連する問題