2012-10-11 32 views
5

Tôi rất là người mới bắt đầu. Tôi muốn học đọc và viết một tập tin. Đây là những gì tôi đang cố gắng.Làm cách nào để đọc từ một tệp trong cùng một thư mục?

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

Thật không may, điều này đang trở lại "C: /directoriesblahblah/ubuntu3.rb: 1: trong 'khởi': Không có tập tin hoặc thư mục - bhaarat.txt (Errno :: ENOENT)

Tôi có tìm thấy giải pháp nhưng tôi không chỉ mới để Ruby nhưng mới đến lập trình nói chung vì vậy tôi không thể có được một câu trả lời khiến cho tinh thần để tôi ra khỏi những.

cảm ơn trước!

+2

bạn có thể đăng giải pháp của mình không? –

Trả lời

9

để có được đường dẫn đến tệp hiện tại, bạn có thể sử dụng:

__FILE__ 

Để có được các thư mục trong đó tập tin hiện tại tồn tại, bạn có thể sử dụng:

File.dirname(__FILE__) 

Để tạo một đường đi từ chuỗi, bạn có thể sử dụng:

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

Vì vậy, để tạo đường dẫn đến tệp trong thư mục đó, bạn có thể sử dụng:

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

Nếu tệp của bạn Tên e là bhaarat.txt, trở nên trên:

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

Nếu bạn thay thế đó trong mã của bạn, bạn sẽ nhận được:

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

Bạn cũng có thể làm cho một biến riêng biệt, nếu bạn muốn, để làm mã dễ đọc hơn:

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

+1, câu trả lời rất kỹ lưỡng –

+0

Tôi đã in Dir.pwd và nó đang tìm kiếm thư mục sai! Vì vậy, tôi đoán một trong những nhu cầu để đảm bảo đó là thư mục bên phải đầu tiên. Cảm ơn bạn đã giúp đỡ! – vheissu

+0

Tham gia Dir.pwd thực sự là vô ích, đường dẫn tương đối với nó theo mặc định. –

2

Tệp được tìm kiếm trong thư mục hiện tại, không phải thư mục có tập lệnh.

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

Di chuyển đến vị trí tệp trước rồi chạy tập lệnh. Ví dụ: nếu tệp nằm trong cùng thư mục với tập lệnh:

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

Tìm thấy thứ gì đó đã thực hiện. Đã tìm kiếm một chút khó khăn hơn và thấy this:

tôi đã thay đổi mã ban đầu của tôi

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

để

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

và làm cho nó trông trong thư mục của tập tin rb của bạn, thay vì thư mục lời nhắc lệnh của bạn hiện đang ở.

+1

Tuy nhiên, bạn thích sử dụng 'File.join' thay vì' + '/ ...' ', vì' File.join' sẽ tạo đường dẫn chính xác cho hệ điều hành bạn đang sử dụng. Ví dụ, trong Windows, đường dẫn sẽ trông giống như 'C: \ ... \ file.txt' trong khi trên Linux nó sẽ giống như'/home /.../ file.txt'. – rid

+0

Cảm ơn radu! Tôi đã thay đổi giải pháp của mình để phù hợp với đề xuất của bạn. – vheissu

Các vấn đề liên quan