2012-10-11 20 views
5

Sono un principiante. Mi piacerebbe imparare a leggere e scrivere un file. Ecco cosa sto provando.Come si legge da un file nella stessa directory?

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

Purtroppo, questo sta tornando "C: /directoriesblahblah/ubuntu3.rb: 1: in 'inizializzazione': Nessun file o directory, quali - bhaarat.txt (Errno :: ENOENT)

ho trovato soluzioni ma non sono nuove solo a Ruby, ma nuovo di programmazione in generale, quindi non ho potuto ottenere una risposta che aveva senso per me fuori di quelli.

Grazie in anticipo!

+2

puoi pubblicare la soluzione? –

risposta

9

per ottenere il percorso il file corrente, è possibile utilizzare:

__FILE__ 

Per ottenere la directory in cui si trova il file corrente, è possibile utilizzare:

File.dirname(__FILE__) 

Per creare un percorso da stringhe, è possibile utilizzare:

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

Pertanto, per creare un percorso per un file in quella directory, è possibile utilizzare:

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

Se il file e nome è bhaarat.txt, l'diviene sopra:

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

Se si sostituisce che nel codice, si otterrà:

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

È anche possibile fare questo una variabile indipendente, se si vuole, per fare il codice più leggibile:

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

+1, risposta molto accurata –

+0

Ho stampato Dir.pwd e cercava la directory sbagliata! Quindi immagino che sia necessario assicurarsi che sia la directory giusta prima. Grazie per l'aiuto! – vheissu

+0

Unire Dir.pwd è in realtà inutile, il percorso è relativo ad esso per impostazione predefinita. –

2

Il file viene cercato nella directory corrente, non nella directory in cui si trova lo script.

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

Passare prima al percorso del file e quindi eseguire lo script. Ad esempio, se il file si trova nella stessa directory con lo script:

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

Trovato qualcosa che ha fatto il trucco. Ricerca un po 'più difficile e trovato this:

ho cambiato il mio codice originale

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

a

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

e che la fa apparire nella directory del file .RB, al posto della directory al momento è in esecuzione il prompt dei comandi.

+1

Tuttavia preferisci usare 'File.join' invece di' + '/ ...' ', perché' File.join' creerà i percorsi corretti per il sistema operativo che stai utilizzando. Ad esempio, in Windows, il percorso apparirà come 'C: \ ... \ file.txt' mentre su Linux sembrerà'/home /.../ file.txt'. – rid

+0

Grazie mille! Ho cambiato la mia soluzione per abbinare il tuo suggerimento. – vheissu

Problemi correlati