2012-04-14 4 views
3

Ich bin ein einfaches Skript zu tun crc aller Dateien zu überprüfen ...Rubin: `lesen ': Invalid argument - (Errno :: EINVAL) bei File.read

require "zlib" 
exit if Object.const_defined?(:Ocra) 

files = Dir.glob("*") 

File.open('dir.txt', 'a+') do |file| 
file.puts files 
end 

File.read('dir.txt').each_line { |line| 
    file = File.read(line) ; nil 
    file_crc = Zlib.crc32(file,0).to_s(16) 
    puts line, file_crc 
} 

Das Problem bei der ist Linie File.read('dir.txt').each_line { |line| ich diesen Fehler:

test.rb:13:in `read': Invalid argument - 1.exe (Errno::EINVAL) 
     from C:/Users/Administrador/Desktop/1.rb:13:in `block in <main>' 
     from C:/Users/Administrador/Desktop/1.rb:12:in `each_line' 
     from C:/Users/Administrador/Desktop/1.rb:12:in `<main>' 

PD: 1.exe ist eine Datei, in der "dir.txt" aufgeführt.

Antwort

6

Haben Sie überprüft, dass die Zeile keine zusätzlichen Zeichen enthält? p line.

IIRC line enthält das Zeilenumbruchzeichen, verwenden Sie line.chomp.

+0

oh tahnkyou, alle Zeilen enthalten eine "\ n" Zeichen gelöst: File.read (Zeile [0 ..- 2]) – ElektroStudios

+2

'File.read (line.strip)' ist wahrscheinlich die robustere Variante. Esp. wenn Sie Windows-Zeilenenden von '\ r \ n' haben. Obwohl Sie dann keine Leerzeichen am Anfang und Ende des Dateinamens haben können, wissen Sie nicht, ob Windows das überhaupt erlaubt. –

+0

ich benutze deine variantenempfehlung, danke nochmal – ElektroStudios