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

Filepath lastPathComponent from HFS or POSIX path

我在 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 路径的最佳方法是什么?

What would be the best way to identify if the delivered path is a posix path or a HFS path?

Off-the-top-of-my-head:我认为您不能根据字符串简单地执行此操作,因为 POSIX 路径分隔符“/”在 HFS 文件名中有效,并且 vice-versa。例如。 POSIX 路径片段:

... Desktop/a:colon.txt

和 HFS 路径片段:

... Desktop:a/colon.txt

引用同一个文件。

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

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

更新

您的评论指出文件不存在,因此检查是否存在显然会失败。因此,请考虑检查解决问题的路径,只为您无法解决的问题产生错误。例如:

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

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

HTH