Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách làm việc với thư mục trong Ruby

Bạn có biết rằng bạn có thể điều hướng hệ thống tệp của mình bằng Ruby không?

Với lớp Ruby “Dir”.

Bạn có thể liệt kê các mục nhập thư mục, thay đổi thư mục hiện tại và thậm chí tạo các thư mục mới!

Đây là một ví dụ :

filenames = Dir.entries(".")

entries phương thức trả về một mảng các mục nhập tên tệp. Mỗi mục nhập là một chuỗi, vì vậy bạn sẽ cần kết hợp lớp này với lớp Tệp Ruby nếu bạn muốn thực sự đọc các tệp này.

Btw, dấu chấm này (. ) đại diện cho thư mục hiện tại .

Đây sẽ là thư mục mà mã của bạn đang chạy, KHÔNG PHẢI là thư mục bạn đang ở (trong thiết bị đầu cuối của bạn) khi chạy mã.

Vì điều đó…

Có thể hữu ích khi kiểm tra thư mục hiện tại của bạn bằng cách sử dụng Dir.pwd phương pháp.

Bây giờ :

Hãy cùng tìm hiểu cách sử dụng Dir lớp để tạo thư mục mới (mkdir ), đổi tên chúng (mv ) và tìm các tên tệp tuân theo một mẫu cụ thể (glob ).

Sử dụng phương pháp Ruby’s Mkdir để tạo thư mục mới

Nếu bạn muốn tạo một thư mục mới với Ruby, bạn có thể sử dụng Dir.mkdir phương pháp.

Ví dụ :

Dir.mkdir("testing")

Nếu được cung cấp một đường dẫn tương đối, thư mục này sẽ được tạo theo đường dẫn hiện tại (Dir.pwd ).

Bạn có thể gặp một vài lỗi :

  • Thư mục đã tồn tại (Errno::EEXIST )
  • Quyền bị từ chối (Errno::EACCES )
  • Bạn đang cố gắng tạo một thư mục trong một thư mục khác chưa tồn tại (Errno::ENOENT )

Lỗi cuối cùng thường xảy ra khi bạn đang cố gắng tạo các thư mục lồng nhau.

Hoặc nếu bạn đang sử dụng một đường dẫn tuyệt đối không tồn tại.

Hai giải pháp :

  • Kiểm tra xem thư mục có tồn tại hay không trước khi tạo nó (với Dir.exists? )
  • Sử dụng lớp học nâng cao hơn (phần tiếp theo)

Hãy tiếp tục học hỏi!

Thao tác nâng cao với mô-đun FileUtils

Nếu bạn cần thêm một chút mã lực, bạn có thể sử dụng FileUtils mô-đun từ thư viện chuẩn.

Nó bao gồm các phương thức như mkdir_p tạo các thư mục lồng nhau trong một bước.

Đây là một ví dụ :

require 'fileutils'

FileUtils.mkdir_p("/tmp/testing/a/b")

Khá tuyệt, phải không?

Đó không phải là tất cả, FileUtils cũng mang lại các tùy chọn bổ sung cho tất cả các hoạt động tệp dưới dạng các đối số từ khóa. Giống như verbose tùy chọn (in các lệnh Linux) và noop (không thay đổi tệp).

Hãy thử!

Cách đổi tên thư mục

Ruby cho phép bạn thực hiện mọi thao tác bạn có thể làm từ giao diện người dùng Hệ điều hành của mình hoặc từ một thiết bị đầu cuối.

Ví dụ…

Bạn có thể đổi tên một thư mục như thế này :

FileUtils.mv("/tmp/a", "/tmp/b")

Bạn cũng sẽ cần sử dụng FileUtils ở đây vì mv không có sẵn trên Dir lớp học.

Cách thay đổi thư mục hiện tại của bạn

Bởi vì tất cả các hoạt động thư mục được chạy từ thư mục hiện tại, bạn có thể muốn thay đổi nó.

Bạn có thể sử dụng Dir.chdir phương pháp để thực hiện việc này.

Ví dụ :

Dir.chdir("/tmp") { Dir.entries(".") }

Điều này hoạt động theo hai cách :

  • Với một khối, thư mục hiện tại chỉ thay đổi đối với mã bên trong khối
  • Không có khối, nó sẽ thay đổi đối với tất cả mã sau khi gọi phương thức

Lưu ý rằng chdir chỉ hoạt động trong quy trình Ruby của bạn, nó không ảnh hưởng đến “thế giới bên ngoài”.

Nói cách khác…

Nó sẽ không thay đổi thư mục làm việc của shell sau khi chương trình Ruby của bạn ngừng chạy.

Liệt kê tệp &thư mục có mẫu khớp

Bạn muốn tìm tất cả các tệp Ruby trong một thư mục? Một nhiệm vụ dễ dàng với glob phương pháp!

Ví dụ :

Dir.glob("*.rb")

Bạn có thể sử dụng bất kỳ tiện ích mở rộng nào khác mà bạn muốn, như “.txt” hoặc “.yml”. Hoặc bất kỳ văn bản nào khác là một phần của tên tệp.

Bạn muốn tìm tệp bên trong tất cả các thư mục?

Đúng, có thể:

Dir.glob("**/*.rb")

Kết quả là một mảng có tất cả các tên tệp, bao gồm cả đường dẫn tương đối. Bạn có thể xóa đường dẫn và chỉ lấy tên tệp bằng cách sử dụng File.basename trên mọi tệp trong danh sách mà bạn nhận được từ glob .

Tóm tắt

Bạn đã học cách làm việc với các thư mục trong Ruby bằng cách sử dụng Dir &FileUtils các lớp học.

Bây giờ đến lượt bạn áp dụng điều này vào thực tế.

Cảm ơn vì đã đọc! 🙂