2012-10-11 13 views
5

Jestem bardzo początkujący. Chciałbym nauczyć się czytać i pisać pliki. Oto, co próbuję.Jak mogę odczytać z pliku w tym samym katalogu?

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

Niestety, ten wraca „C: /directoriesblahblah/ubuntu3.rb: 1: w 'zainicjować': Nie ma takiego pliku lub katalogu - bhaarat.txt (errno :: ENOENT)

mam znaleźć rozwiązania, ale nie jestem nowy tylko do Ruby, ale nowy do programowania w ogóle, więc nie mogłem dostać odpowiedź, która dla mnie sens z nich.

Dzięki z góry!

+2

Czy możesz zamieścić swoje rozwiązanie? –

Odpowiedz

9

aby uzyskać ścieżkę aktualny plik, możesz użyć:

__FILE__ 

Aby otrzymać katalog, w którym istnieje obecny plik, można użyć:

File.dirname(__FILE__) 

Aby utworzyć ścieżkę od strun, można użyć:

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

Dlatego, aby stworzyć ścieżkę do pliku w tym katalogu, możesz użyć:

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

Jeśli twój fil Nazwa e jest bhaarat.txt powyższa postać:

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

Jeśli zastąpić że w kodzie, dostaniesz:

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

Można również zrobić to oddzielna zmienna, jeśli chcesz, aby kod bardziej czytelny:

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

+1, bardzo dokładna odpowiedź –

+0

Wydrukowałem Dir.pwd i szukałem niewłaściwego katalogu! Sądzę więc, że najpierw trzeba się upewnić, że jest to właściwy katalog. Dzięki za pomoc! – vheissu

+0

Łączenie Dir.pwd jest w rzeczywistości bezużyteczne, domyślnie ścieżka jest względem niego względna. –

2

Plik jest przeszukiwany w bieżącym katalogu, a nie w katalogu, w którym znajduje się skrypt.

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

Najpierw przejdź do lokalizacji pliku, a następnie uruchom skrypt. Na przykład, jeśli plik znajduje się w tym samym katalogu ze skryptem:

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

Znaleziono coś, co wystarczyło. Szukano trochę mocniej i znalazł this:

zmieniłem mój oryginalny kod

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

do

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

i sprawia, że ​​wyglądają w katalogu pliku .rb, zamiast katalogu Twój wiersz polecenia jest aktualnie dostępny.

+1

Jednak wolisz używać 'File.join' zamiast' + '/ ...' ', ponieważ' File.join' utworzy poprawne ścieżki dla systemu operacyjnego, którego używasz. Na przykład w Windows ścieżka będzie wyglądać jak "C: \ ... \ file.txt", podczas gdy na Linuksie będzie wyglądać jak '/ home /.../ plik.txt'. – rid

+0

Dzięki radu! Zmieniłem moje rozwiązanie, aby pasowało do Twojej sugestii. – vheissu

Powiązane problemy