ฉันต้องการจัดเก็บไฟล์เป็น /a/b/c/d.txt แต่ฉันไม่รู้ว่ามีไดเรกทอรีเหล่านี้อยู่หรือไม่และจำเป็นต้องสร้างซ้ำหากจำเป็น ทับทิมทำแบบนี้ได้อย่างไร?
ฉันต้องการจัดเก็บไฟล์เป็น /a/b/c/d.txt แต่ฉันไม่รู้ว่ามีไดเรกทอรีเหล่านี้อยู่หรือไม่และจำเป็นต้องสร้างซ้ำหากจำเป็น ทับทิมทำแบบนี้ได้อย่างไร?
คำตอบ:
ใช้ mkdir_p เพื่อสร้างไดเร็กทอรีแบบวนซ้ำ
path = "/tmp/a/b/c"
FileUtils.mkdir_p(path) unless File.exists?(path)
หากคุณใช้งานบนเครื่อง unixy อย่าลืมว่าคุณสามารถเรียกใช้คำสั่ง shell ภายใต้ Ruby ได้ตลอดเวลาโดยวางไว้ใน backticks
`mkdir -p /a/b/c`
ชื่อเส้นทางสู่การช่วยเหลือ!
Pathname('/a/b/c/d.txt').dirname.mkpath
FileUtils.mkdir_p '/a/b/c'
+ สร้าง d.txt
ในเวลาเดียวกันหรือไม่?
Pathname('/a/b/c/d.txt').dirname.mkpath
และFile.write('/a/b/c/d.txt', content)
ไม่มีfilename = '/a/b/c/d.txt'.rpartition('/').last
และส่วนที่เหลือของการแยกวิเคราะห์
คุณยังสามารถใช้ตรรกะของคุณเอง
def self.create_dir_if_not_exists(path)
recursive = path.split('/')
directory = ''
recursive.each do |sub_directory|
directory += sub_directory + '/'
Dir.mkdir(directory) unless (File.directory? directory)
end
end
ดังนั้นหากเส้นทางคือ 'tmp / a / b / c' ถ้า 'tmp' ไม่มี 'tmp' จะถูกสร้างขึ้น 'tmp / a /' และอื่น ๆ ไปเรื่อย ๆ
FileUtils
และPathname
อาจเป็นเครื่องมือที่สำคัญที่สุดสำหรับการเขียนสคริปต์เชลล์ Ruby