我需要从文件路径解析ruby a中的基本名称,我将其作为输入。 Unix格式在Linux上运行良好。
File.basename( “/ TMP /的text.txt”)返回“text.txt”。但是,当我在Windows中输入时……
我不相信你的代码有问题。我认为你的考试有问题。
Ruby也使用反斜杠字符 逃逸序列 在字符串中,因此当您键入字符串文字时 "C:\Users\john\note.txt" ,Ruby将前两个反斜杠视为无效的转义序列,因此忽略了转义字符。 \n 是指换行符。所以,对Ruby来说,这个文字是一样的 "C:Usersjohn\note.txt" 。该序列中没有任何文件分隔符,因为\ n是换行符,而不是后跟字母的反斜杠 ñ ,因此File.basename只是在收到它时返回它。
"C:\Users\john\note.txt"
\n
"C:Usersjohn\note.txt"
如果您要求在图形用户界面(GUI)或命令行界面(CLI)中输入用户,则输入输入的用户无需担心Ruby String转义序列;那些只在代码中直接与String文字有关。试试吧!类型 gets 成 IRB 要么 撬 ,然后键入或复制文件路径,然后按 输入 ,并看看Ruby如何将其显示为String文字。
gets
在Windows上,Ruby接受使用“/”(File :: SEPARATOR)和“\\”给出的路径( 文件:: ALT_SEPARATOR ),因此除非您将转换显示给用户,否则无需担心转换。
反斜杠,虽然Windows表达的东西,只是一个巨大的麻烦。在双引号字符串中,它们具有特殊含义,因此您需要执行以下操作:
File.basename("C:\\Users\\john\\note.txt")
或者使用单引号来避免问题:
File.basename('C:\Users\john\note.txt')
或者使用不受影响的常规斜杠:
File.basename("C:/Users/john/note.txt")
Ruby为您提供映射到特定于平台的路径分隔符。
尝试 pathname :
pathname
require 'pathname' Pathname.new('C:\Users\john\note.txt').basename # => #<Pathname:note.txt>
路径名文档
参考 如何在Ruby中从文件路径获取没有扩展名的文件名