2011-07-04 14 views
39

he instalado de Ruby 1.9.2 en mi máquina de Windows 7. Creó un archivo simple analyzer.rb. Tiene esta línea:de Ruby da "No existe el fichero o directorio - text.txt (Errno :: ENOENT)" error

File.open("text.txt").each {|line| puts line} 

Cuando ejecuto el código, me da este error:

analyzer.rb:1:in `initialize': No such file or directory - text.txt (Errno::ENOENT) 
from analyzer.rb:1:in `open' 
from analyzer.rb:1:in `<main>' 
Exit code: 1 

Yo no lo entiendo. Hay un archivo text.txt en el mismo directorio que el archivo analyzer.rb. También intenté alimentar la ruta absoluta del archivo, C:\Ruby192\text.txt, pero no dados. ¿Qué me estoy perdiendo?

Respuesta

62

Empiece por averiguar lo que su directorio de trabajo actual es de su script en ejecución.
Agregue esta línea al principio:

puts Dir.pwd.

Esto le dirá en el que la corriente de rubí directorio de trabajo se está ejecutando el script. Lo más probable es que vea que no es donde usted supone que es. Luego, asegúrese de especificar correctamente los nombres de las rutas para Windows. Consulte la documentación aquí cómo formatear correctamente los nombres de ruta para las ventanas:

http://www.ruby-doc.org/core/classes/IO.html

a continuación, utilice Dir.chdir para cambiar el directorio de trabajo al lugar donde text.txt es, o especificar la ruta absoluta al archivo de acuerdo con el instrucciones en los documentos IO arriba. Eso debería hacerlo ...

EDITAR

Adición de una tercera solución que podría ser el más conveniente, si usted está poniendo los archivos de texto entre los archivos de script:

Dir.chdir(File.dirname(__FILE__)) 

Esto cambiará automáticamente el directorio de trabajo actual al mismo directorio que el archivo .rb que ejecuta el script.

+0

Eso fue todo Dir.pwd hizo el truco. Estaba mirando C: \ Ruby192 mientras yo estaba colocando el archivo de texto en C: \ Ruby192 \ bin. Una vez que lo coloqué en la ubicación correcta, funcionó como un amuleto. ¡Gracias! –

+3

@enraged camel: en general, no deberías poner archivos de texto allí. Cuanto más rebusques con los archivos, más probable es que elimines algo que no deberías. –

+0

¡Gracias! Nagios tenía el mismo problema ruby script en background ... 'Dir.chdir' hizo el truco! – Arpit

13

ENOENT significa que no está allí.

Sólo actualizar el código a:

File.open(File.dirname(__FILE__) + '/text.txt').each {|line| puts line} 
+0

Gracias por su respuesta. Eso no pareció ayudar sin embargo. Sigue recibiendo el mismo error, aunque text.txt existe en el directorio de instalación de Ruby al lado del archivo .rb. ¿Cuáles son algunas de las posibles razones por las cuales no puede encontrarlo? –

+0

En realidad, la mejor solución podría ser 'Dir.chdir (File.dirname (__ FILE __))'. De esa manera, garantizará que el directorio de trabajo sea el mismo que el script. – Casper

+0

También puede usar 'File.open (File.expand_path (__ FILE__,' ... como se sugiere en https://github.com/travis-ci/travis-ci/issues/4656#issuecomment-131212402 –

2

Trate de usar

Dir.glob(".") 

Para ver lo que hay en el directorio (y por lo tanto que directorio está mirando).

2

Junto a estar en el directorio equivocado yo sólo tropezó sobre otra variante:

tuve una File.open(my_file).each {|line| puts line} explosión pero había algo con ese nombre en el directorio que estaba trabajando en (ls en la línea de comandos mostraron el nombre) He hablado con un File.exists?(my_file) que extrañamente volvió false. Explicación: my_file era un enlace simbólico cuyo objetivo ya no existía. Desde File.exists? seguirá un enlace simbólico que va a decir false pesar de que el enlace está todavía allí.

4

Utilice chomp() o chomp() con STDIN

es decir test1.rb

print 'Enter File name: ' 

fname = STDIN.gets.chomp() # or fname = gets.chomp() 


fname_read = File.open(fname) 

puts fname_read.read() 
1
respuesta de

Ditto Casper:

puts Dir.pwd 

Tan pronto como usted sabe directorio de trabajo actual, especifique la ruta del archivo relativamente a ese directorio.

Por ejemplo, si el directorio de trabajo es raíz del proyecto, se puede abrir un archivo debajo de ella directamente como esto

json_file = File.read(myfile.json) 
Cuestiones relacionadas