【问题标题】:Filepath lastPathComponent from HFS or POSIX path来自 HFS 或 POSIX 路径的文件路径 lastPathComponent
【发布时间】:2018-04-03 09:20:45
【问题描述】:

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

【问题讨论】:

  • 真的投反对票吗?一个理由会很好。

标签: objective-c macos hfs


【解决方案1】:

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

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

... Desktop/a:colon.txt

和HFS路径片段:

... Desktop:a/colon.txt

引用同一个文件。

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

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

更新

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

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

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

HTH

【讨论】:

  • 感谢@CRD 的快速回复。我用你的方法面临的问题是这些文件即将被创建,所以它们还不存在。所以我不能使用 fileManager 来检查现有的路径:/
  • 谢谢。解析 für 字符串是我想尝试的最后一件事,但似乎没有办法解决它。
猜你喜欢
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2011-09-17
相关资源
最近更新 更多