gpt4 book ai didi

objective-c - Cocoa/Objective-C 获取一个 HFS 路径(路径 :to:desktop) from a posix path (path/to/desktop)

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:33 26 4
gpt4 key购买 nike

我在 OSX、Objective-C 上。

我有一个像

这样的路径/NSURL
/Users/xxx/Desktop/image2.png

但我将它传递给第三方应用程序,该应用程序会像 excpects finder 路径一样

Harddisk:Users:Desktop:image2.png

是否有任何方法(我找不到)来转换这样的路径或将它们从 NSURL 中取出(如果可能而不修改字符串)?

在 AppleScript 中是

return POSIX file "/Users/xxx/Desktop/image2.png" -->  Harddisk:Users:xxx:Desktop:image2.png

编辑:这几乎是一样的:Cocoa path string conversion不幸的是,该方法已被弃用...

最佳答案

目前没有(简单的)替代方案。

函数 CFURLCopyFileSystemPath 没有被弃用,只有枚举案例 kCFURLHFSPathStyle 被弃用了,但原始值 1 仍然有效并避免了警告.

我正在使用 NSString 的这个类别

@implementation NSString (POSIX_HFS)

- (NSString *)hfsPathFromPOSIXPath
{
CFStringRef hfsPath = CFURLCopyFileSystemPath((CFURLRef)[NSURL fileURLWithPath:self], 1);
return (NSString *)CFBridgingRelease(hfsPath);
}
@end

该函数在 Swift 中也有效。 Swift 版本更复杂一些,并添加了隐式表示字典的尾随分号,此处作为 URL 的扩展:

extension URL {

func hfsPath() -> String?
{
if let cfpathHFS = CFURLCopyFileSystemPath(self as CFURL, CFURLPathStyle(rawValue: 1)!) { // CFURLPathStyle.CFURLHFSPathStyle)
let pathHFS = cfpathHFS as String
do {
let info = try self.resourceValues(forKeys: [.isDirectoryKey, .isPackageKey])
let isDirectory = info.isDirectory!
let isPackage = info.isPackage!

if isDirectory && !isPackage {
return pathHFS + ":" // directory, not package
}
} catch _ {}
return pathHFS
}
return nil
}
}

关于objective-c - Cocoa/Objective-C 获取一个 HFS 路径(路径 :to:desktop) from a posix path (path/to/desktop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com