的使用File.join()
是错误的。.join()
返回一个字符串,然后应用.last
到它会产生错误,因为没有.last
String 对象的方法。
pry(main)> extension = '.xml'
=> ".xml"
pry(main)> File.join(extension).last
NoMethodError: undefined method `last' for ".xml":String
相反,您需要将要加入的路径元素数组传递到文件的路径中:
pry(main)> File.join('.', 'path', 'to', 'a', 'file.ext')
=> "./path/to/a/file.ext"
或者:
pry(main)> File.join('/', 'path', 'to', 'a', 'file.ext')
=> "/path/to/a/file.ext"
花时间阅读 Ruby 的File
课程。它允许您以完全独立于操作系统的方式处理文件和路径。
在剖析路径时,它dirname
的basename
、 和extname
方法很方便:
pry(main)> File.dirname('/path/to/a/file.ext')
=> "/path/to/a"
pry(main)> File.basename('/path/to/a/file.ext')
=> "file.ext"
pry(main)> File.extname('/path/to/a/file.ext')
=> ".ext"
还有split
一种结合dirname
and的方法basename
,返回路径和“filename.ext”,允许您使用并行分配:
pry(main)> dirname, filename = File.split('/path/to/a/file.ext')
=> ["/path/to/a", "file.ext"]
File.basename
采用可选的“扩展”参数,允许它剥离扩展:
pry(main)> File.basename('/path/to/a/file.ext', '.ext')
=> "file"
结合所有这些神奇的优点,您可以整天折叠、旋转和破坏您的文件名和路径。