收到一个问题,说升级到 macOS Sequoia,客户端复制文件粘贴到程序中通过代码获取的路径是 file:///.file/id=xxxx
,而不是实际文件路径。之前的版本是正常的。
从剪切板获取文件路径的代码:
void get_file_names(void) {
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
NSArray* tempArray = [pasteboard pasteboardItems];
for(NSPasteboardItem *tmpItem in tempArray){
NSString *pathString = [tmpItem stringForType:@"public.file-url"];
NSLog(@"pathString: %@", pathString);
}
}
通过 public.file-url
方式获取的地址不再是文件的真实路径,而是一个 fileid
形式的地址,其实兼容的代码很简单就是使用 [NSURL path]
重新获取一下地址就OK了。
修改后代码:
void get_file_names(void) {
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
NSArray* tempArray = [pasteboard pasteboardItems];
for(NSPasteboardItem *tmpItem in tempArray){
NSString *pathString = [tmpItem stringForType:@"public.file-url"];
if (pathString && [pathString isKindOfClass:[NSString class]]) {
NSURL *url = [NSURL URLWithString:pathString];
NSString *realPathString = [url path];
NSLog(@"pathString: %@", realPathString);
}
}
}
其实还是代码写的不是很规范导致的,在 Drag and Drop
等场景下面早就是 fileid
形式的地址了。