2012-10-11 22 views
5

Soy un principiante. Me gustaría aprender a leer y escribir un archivo. Esto es lo que estoy intentando.¿Cómo leo de un archivo en el mismo directorio?

rdfile = File.open('bhaarat.txt', 'r+') 

Desafortunadamente, esto está regresando "C: /directoriesblahblah/ubuntu3.rb: 1: en 'inicializar': Ningún archivo o directorio, - bhaarat.txt (Errno :: ENOENT)

tengo encontrado soluciones pero no soy único nuevo a Ruby, pero nuevo en la programación, en general, por lo que no podía conseguir una respuesta que tenía sentido para mí salir de ellos.

Gracias de antemano!

+2

¿puede publicar su solución? –

Respuesta

9

para obtener la ruta a el archivo actual, puede usar:

__FILE__ 

Para obtener el directorio en el que se encuentra el archivo actual, se puede utilizar:

File.dirname(__FILE__) 

Para crear una ruta a partir de cadenas, puede utilizar:

File.join('part1', 'part2', ...) 

Por lo tanto, para crear una ruta a un archivo en ese directorio, puede usar:

File.join(File.dirname(__FILE__), 'filename') 

Si su fil Nombre E es bhaarat.txt, lo anterior se convierte en:

File.join(File.dirname(__FILE__), 'bhaarat.txt') 

Si reemplaza que en su código, se obtiene:

rdfile = File.open(File.join(File.dirname(__FILE__), 'bhaarat.txt'), 'r+') 

También puede hacer de esto una variable separada, si lo desea, para hacer el código más legible:

path = File.join(File.dirname(__FILE__), 'bhaarat.txt') 
rdfile = File.open(path, 'r+') 
+0

+1, respuesta muy completa –

+0

¡Imprimí Dir.pwd y estaba buscando en el directorio incorrecto! Así que supongo que uno necesita asegurarse de que sea el directorio correcto primero. ¡Gracias por tu ayuda! – vheissu

+0

Unirse a Dir.pwd es realmente inútil, la ruta es relativa a él por defecto. –

2

El archivo se busca en el directorio actual, no en el directorio donde se encuentra el script.

C:\> ruby scripts\ubuntu3.rb 
No such file or directory - bhaarat.txt 

Vaya primero a la ubicación del archivo y luego ejecute el script. Por ejemplo, si el archivo está ubicado en el mismo directorio con la secuencia de comandos:

C:\> cd scripts 
C:\scripts> ruby ubuntu3.rb 
1

Encontré algo que hizo el truco. Buscado un poco más y encontró this:

he cambiado de código original

rdfile = File.open('bhaarat.txt', 'r+') 

a

rdfile = File.open(File.join(File.dirname(__FILE__),'bhaarat.txt'), 'r+') 

y eso hace que se vea en el directorio de su archivo .rb, en lugar del directorio que su símbolo del sistema está actualmente en.

+1

Sin embargo, prefiera usar 'File.join' en lugar de' + '/ ...'', porque 'File.join' creará las rutas correctas para el sistema operativo que está utilizando. Por ejemplo, en Windows, la ruta se verá como 'C: \ ... \ file.txt' mientras que en Linux se verá como'/home /.../ file.txt'. – rid

+0

Gracias radu! Cambié mi solución para que coincida con tu sugerencia. – vheissu

Cuestiones relacionadas