tutorial - ruby wikipedia
File.open de Ruby muestra el error "No hay tal archivo o directorio-text.txt(Errno:: ENOENT)" (6)
Instalé Ruby 1.9.2 en mi máquina Win 7. Creó un archivo simple analyzer.rb
. Tiene esta una línea:
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
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?
Comience por averiguar cuál es su directorio de trabajo actual para su secuencia de comandos en ejecución.
Agregue esta línea al principio:
puts Dir.pwd
.
Esto le dirá en qué ruby de directorio de trabajo actual está ejecutando su 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 aquí los documentos sobre cómo formatear correctamente los nombres de las rutas para Windows:
http://www.ruby-doc.org/core/classes/IO.html
A continuación, utilice Dir.chdir
para cambiar el directorio de trabajo al lugar donde está el texto.txt o especifique la ruta de acceso absoluta al archivo de acuerdo con las instrucciones en los documentos de IO anteriores. Deberias hacer eso...
EDITAR
Agregar una tercera solución que podría ser la más conveniente, si está colocando 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.
Después de estar en el directorio equivocado, me tropecé con otra variante:
Tenía un File.open(my_file).each {|line| puts line}
File.open(my_file).each {|line| puts line}
explotando pero había algo con ese nombre en el directorio en el que estaba trabajando (ls en la línea de comando mostraba el nombre). Comprobé con un File.exists?(my_file)
que extrañamente devolvió false
. Explicación: my_file
fue un enlace simbólico cuyo objetivo ya no existía. Como File.exists?
seguirá un enlace simbólico, dirá false
aunque el enlace todavía está allí.
Intenta usar
Dir.glob(".")
Para ver qué hay en el directorio (y, por lo tanto, qué directorio está mirando).
La respuesta de Ditto Casper:
puts Dir.pwd
Tan pronto como conozca el directorio de trabajo actual, especifique la ruta del archivo relativa a ese directorio.
Por ejemplo, si su directorio de trabajo es proyecto raíz, puede abrir un archivo debajo de él directamente como este
json_file = File.read(myfile.json)
Usa 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()
ENOENT
significa que no está allí.
Simplemente actualice su código a:
File.open(File.dirname(__FILE__) + ''/text.txt'').each {|line| puts line}