如何在 OS X 上获取可移动卷的 NSURL 并在安装时发出通知?
Posted
技术标签:
【中文标题】如何在 OS X 上获取可移动卷的 NSURL 并在安装时发出通知?【英文标题】:How to get NSURL of removable Volumes on OS X and notification when it mounts? 【发布时间】:2016-01-24 19:05:51 【问题描述】:我需要检测 USB 驱动器(例如Office23,安装在 OS X 中,还可以搜索文件,例如。驱动器中的 jan.txt 并将其复制到应用程序包中。
我正在使用以下方法来查找是否已安装卷:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = error;
NSArray *keys = @[NSURLVolumeNameKey, NSURLVolumeIsRemovableKey, NSURLVolumeIsEjectableKey];
NSArray *volumeURL = [fileManager mountedVolumeURLsIncludingResourceValuesForKeys:keys options:NSVolumeEnumerationProduceFileReferenceURLs];
for (NSURL *url in volumeURL)
NSLog(@"URL %@", url);
结果:file:///.file/id=6571367.2/
如何获取 Volume 中文件的 NSURL?
编辑 1:
NSArray *keys = [NSArray arrayWithObjects:NSURLVolumeNameKey, NSURLVolumeIsRemovableKey, nil];
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:keys options:0];
NSURL *officeDriveURL;
for (NSURL *url in urls)
NSError *error;
NSNumber *isRemovable;
NSString *volumeName;
[url getResourceValue:&isRemovable forKey:NSURLVolumeIsRemovableKey error:&error];
if ([isRemovable boolValue])
[url getResourceValue:&volumeName forKey:NSURLVolumeNameKey error:&error];
if ([[url absoluteString] containsString:@"Office"])
officeDriveURL = url;
NSURL *fullURL = [officeDriveURL URLByAppendingPathComponent:@"documents/My File2.txt"];
if ([[NSFileManager defaultManager]fileExistsAtPath:[fullURL absoluteString]])
NSLog(@"YES FILE Exist %@", fullURL);
不过,FileManager 还是找不到 url。
完整网址为:file:///Volumes/Office/documents/My%File2.txt
当我通过 Finder 或 NSFileManager 进行检查时,这不起作用,但路径是正确的。
【问题讨论】:
你为什么要传递NSVolumeEnumerationProduceFileReferenceURLs
? documentation 表示它将生成文件引用 URL,而不是基于路径的 URL。将零作为options
的参数传递,你应该很高兴。
@Cristik,我更改了方法,并获取了卷路径,但是当我向其中添加扩展名时,NSFileManager 找不到它。
@Cristik,路径正确,仍然无法通过它定位。
我的意思是,fileExistAtPath 的结果为 False
看NSWorkspaceDidMountNotification
of NSWorkspace
【参考方案1】:
我不知道为什么FileManager
没有使用[NSURL absoluteString]
方法找到文件,当我从file:///Volumes/Office/documents/My%File2.txt
中删除file:// 并修改了%20 时,得到了引入 (My%20File2,txt),它起作用了。
【讨论】:
以上是关于如何在 OS X 上获取可移动卷的 NSURL 并在安装时发出通知?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OS X 中读取 midi 文件并获取曲目的预设信息