0

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

4

1 回答 1

0

确定交付的路径是 posix 路径还是 HFS 路径的最佳方法是什么?

Off-the-top-of-my-head:我不认为你可以根据字符串简单地做到这一点,因为 POSIX 路径分隔符“/”在 HFS 文件名中是有效的,反之亦然。例如 POSIX 路径片段:

... Desktop/a:colon.txt

和 HFS 路径片段:

... Desktop:a/colon.txt

参考同一个文件。

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

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

更新

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

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

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

高温高压

于 2018-04-03T10:30:15.780 回答