来自HFS或POSIX路径的文件路径lastPathComponent

时间:2018-04-03 09:20:45

标签: objective-c macos hfs

我在OSX上,而不是iOS,Objective-C

我收到这样的外部输入,我需要获取该文件。

Case A (posix path): "path/to/afile.extension"
Case B (HFS path): "path:to:afile.extension"

在案例A中,我可以使用

获取文件
[path lastPathComponent];

在案例B中我可以通过

获得
[[path componentsSeparatedByString:@":"] lastObject];

不幸的是,我不知道输入是A型还是B型。识别传递路径是posix路径还是HFS路径的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

识别传递路径是posix路径还是HFS路径的最佳方法是什么?

我的头脑:我不认为你可以根据字符串做这件事,因为POSIX路径分隔符'/'在HFS文件名中是有效的,副-versa。例如。 POSIX路径片段:

... Desktop/a:colon.txt

和HFS路径片段:

... Desktop:a/colon.txt

指的是同一个文件。

您可以做的是检查路径是否存在使用文件管理器(NSFileManager)调用 - 这些调用HFS路径 - 以及access(2)系统调用 - 它采用POSIX路径。如果只有其中一个工作,你知道你拥有的路径类型,如果两个工作都有一些异常命名的磁盘和文件,并且路径不明确! (如果两种方法都不起作用,则无论如何解释路径都无效。)

您也可以通过从路径创建文件NSURL来进行检查,如果成功,则调用NSURL方法来检查是否存在。

<强>更新

您的评论指出文件不存在,因此检查是否存在显然会失败。所以考虑一下检查它的工作路径,只为你无法弄清楚的错误产生错误。 E.g:

  • 如果路径只包含'/'或':'分隔符,则可以确定POSIX或HFS
  • 完整的HFS路径始终以卷名后跟冒号开头。确定已安装的卷名称并根据您拥有的路径检查这些名称(如果与您具有HFS路径的路径匹配)

要检查字符串中的字符,卷名等,请从NSStringNSFileManagerNSURL文档开始。如果您遇到任何问题,一旦您构建了一系列测试,请提出一个新问题来描述您的测试,显示您的代码等等,而且毫无疑问会有人帮助您。

HTH