คุณรู้หรือไม่ว่าคุณสามารถนำทางระบบไฟล์ของคุณด้วย Ruby?
กับคลาส Ruby “ผบ.”
คุณสามารถแสดงรายการไดเรกทอรี เปลี่ยนไดเรกทอรีปัจจุบัน และสร้างโฟลเดอร์ใหม่ได้!
นี่คือตัวอย่าง :
filenames = Dir.entries(".")
entries
นี้ วิธีการส่งกลับอาร์เรย์ของรายการชื่อไฟล์ ทุกรายการเป็นสตริง ดังนั้น คุณจะต้องรวมสิ่งนี้กับคลาส Ruby File หากคุณต้องการอ่านไฟล์เหล่านี้จริงๆ
ว่าแต่ จุดนี้ (.
) หมายถึง ไดเรกทอรีปัจจุบัน .
นี่จะเป็นไดเร็กทอรีที่โค้ดของคุณเรียกใช้ ไม่ใช่ไดเร็กทอรีที่คุณอยู่ (ในเทอร์มินัลของคุณ) เมื่อรันโค้ด
ด้วยเหตุนั้น…
การตรวจสอบไดเร็กทอรีปัจจุบันของคุณอาจเป็นประโยชน์โดยใช้ Dir.pwd
วิธีการ
ตอนนี้ :
มาเรียนรู้วิธีใช้ Dir
. กันเถอะ class เพื่อสร้างไดเร็กทอรีใหม่ (mkdir
) เปลี่ยนชื่อพวกเขา (mv
) และค้นหาชื่อไฟล์ที่เป็นไปตามรูปแบบเฉพาะ (glob
)
การใช้ Ruby's Mkdir Method เพื่อสร้างไดเรกทอรีใหม่
หากคุณต้องการสร้างโฟลเดอร์ใหม่ด้วย Ruby คุณสามารถใช้ Dir.mkdir
วิธีการ
ตัวอย่าง :
Dir.mkdir("testing")
หากกำหนดเส้นทางสัมพัทธ์ ไดเรกทอรีนี้จะถูกสร้างขึ้นภายใต้เส้นทางปัจจุบัน (Dir.pwd
)
คุณอาจได้รับข้อผิดพลาดเล็กน้อย :
- ไดเรกทอรีมีอยู่แล้ว (
Errno::EEXIST
) - การอนุญาตถูกปฏิเสธ (
Errno::EACCES
) - คุณกำลังพยายามสร้างโฟลเดอร์ภายใต้โฟลเดอร์อื่นที่ยังไม่มีอยู่ (
Errno::ENOENT
)
ข้อผิดพลาดสุดท้ายมักเกิดขึ้นเมื่อคุณพยายามสร้างไดเรกทอรีที่ซ้อนกัน
หรือหากคุณกำลังใช้เส้นทางที่ไม่มีอยู่จริง
สองโซลูชั่น :
- ตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่ก่อนที่จะสร้าง (ด้วย
Dir.exists?
) - ใช้ชั้นเรียนขั้นสูง (ส่วนถัดไป)
มาเรียนรู้กันต่อ!
การทำงานขั้นสูงด้วยโมดูล FileUtils
หากคุณต้องการแรงม้าเพิ่มเติม คุณสามารถนำเข้า FileUtils
โมดูลจากไลบรารีมาตรฐาน
ประกอบด้วยวิธีการต่างๆ เช่น mkdir_p
ที่สร้างไดเร็กทอรีที่ซ้อนกันในขั้นตอนเดียว
นี่คือตัวอย่าง :
require 'fileutils' FileUtils.mkdir_p("/tmp/testing/a/b")
เจ๋งมากใช่มั้ย
ยังไม่หมดแค่นั้น FileUtils
ยังนำเสนอตัวเลือกเพิ่มเติมสำหรับการดำเนินการไฟล์ทั้งหมดในรูปแบบของอาร์กิวเมนต์คำหลัก เช่นเดียวกับ verbose
ตัวเลือก (พิมพ์คำสั่ง Linux) &noop
(อย่าเปลี่ยนไฟล์) ตัวเลือก
ให้มันลอง!
วิธีการเปลี่ยนชื่อไดเร็กทอรี
Ruby ช่วยให้คุณดำเนินการทุกอย่างที่ทำได้จากอินเทอร์เฟซผู้ใช้ระบบปฏิบัติการหรือจากเทอร์มินัล
ตัวอย่างเช่น…
คุณสามารถเปลี่ยนชื่อไดเร็กทอรีแบบนี้ได้ :
FileUtils.mv("/tmp/a", "/tmp/b")
คุณจะต้องใช้ FileUtils
. ด้วย ที่นี่เพราะ mv
ไม่มีใน Dir
ชั้นเรียน
วิธีการเปลี่ยนไดเร็กทอรีปัจจุบันของคุณ
เนื่องจากการทำงานของไดเร็กทอรีทั้งหมดรันจากไดเร็กทอรีปัจจุบัน คุณอาจต้องการเปลี่ยนแปลง
คุณสามารถใช้ Dir.chdir
วิธีการทำ
ตัวอย่าง :
Dir.chdir("/tmp") { Dir.entries(".") }
ใช้งานได้สองวิธี :
- ด้วยบล็อก ไดเร็กทอรีปัจจุบันจะเปลี่ยนเฉพาะโค้ดภายในบล็อกเท่านั้น
- ถ้าไม่มีการบล็อก มันจะเปลี่ยนโค้ดทั้งหมดหลังจากการเรียกใช้เมธอด
สังเกตว่า chdir
ใช้งานได้ภายในกระบวนการ Ruby ของคุณเท่านั้น ไม่ส่งผลต่อ “โลกภายนอก”
กล่าวอีกนัยหนึ่ง…
มันจะไม่เปลี่ยนไดเร็กทอรีการทำงานของเชลล์ของคุณหลังจากที่โปรแกรม Ruby ของคุณหยุดทำงาน
รายการไฟล์และไดเรกทอรีที่มีการจับคู่รูปแบบ
ต้องการค้นหาไฟล์ Ruby ทั้งหมดในโฟลเดอร์หรือไม่? งานง่ายด้วย glob
วิธีการ!
ตัวอย่าง :
Dir.glob("*.rb")
คุณสามารถใช้ส่วนขยายอื่นๆ ที่ต้องการได้ เช่น “.txt” หรือ “.yml” หรือข้อความอื่นๆ ที่เป็นส่วนหนึ่งของชื่อไฟล์
ต้องการค้นหาไฟล์ภายในโฟลเดอร์ทั้งหมดหรือไม่
ใช่ เป็นไปได้:
Dir.glob("**/*.rb")
ผลลัพธ์คืออาร์เรย์ที่มีชื่อไฟล์ทั้งหมด รวมทั้งเส้นทางที่สัมพันธ์กัน คุณสามารถลบพาธและรับเฉพาะชื่อไฟล์โดยใช้ File.basename
เมธอดในทุกไฟล์ของรายการที่คุณได้รับจาก glob
.
สรุป
คุณได้เรียนรู้วิธีการทำงานกับไดเรกทอรีใน Ruby โดยใช้ Dir
&FileUtils
ชั้นเรียน
ตอนนี้ถึงตาคุณแล้วที่จะนำสิ่งนี้ไปปฏิบัติ
ขอบคุณที่อ่าน! 🙂