我正在编写一个应用程序来将某些文件复制到某个位置。它允许用户选择始终位于AFP共享上的目的地。这是通过NSOpenPanel完成的。返回的URL是:file://localhost/Volumes/Oliver%20Legg's%20Backup/
。
我想要完成的是当应用程序启动时,如果未安装AFP共享,我希望它自动安装它。这样做的最佳方式是什么?
“获取信息”命令将服务器列为:afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup
。如何以编程方式从文件URL获取此URL?我想如果我能获得该URL,我可以使用FSMountServerVolumeAsync安装它。这是最好的(最简单,最抽象的)API吗?
答案 0 :(得分:6)
您需要使用一些较低级别的文件管理器例程来获取此信息,通过常规Cocoa调用无法执行此操作。该URL是使用FSCopyURLForVolume()
获取的,但您需要获取已装入卷的卷参考号才能使用它:
#import <CoreServices/CoreServices.h>
//this is the path to the mounted network volume
NSString* pathToVolume = @"/Volumes/MountedNetworkVolume/";
//get the volume reference number
FSRef pathRef;
FSPathMakeRef((UInt8*)[pathToVolume fileSystemRepresentation],&pathRef,NULL);
FSCatalogInfo catalogInfo;
OSErr osErr = FSGetCatalogInfo(
&pathRef,
kFSCatInfoVolume,
&catalogInfo,
NULL,
NULL,
NULL
) ;
FSVolumeRefNum volumeRefNum = 0;
if(osErr == noErr)
volumeRefNum = catalogInfo.volume;
//get the server URL for the volume
CFURLRef serverLocation;
OSStatus result = FSCopyURLForVolume (volumeRefNum,&serverLocation);
if(result == noErr)
NSLog(@"The server location is: %@",serverLocation);
else
NSLog(@"An error occurred: %i",result);
CFRelease(serverLocation);
FSMountServerVolumeAsync
绝对是安装远程卷的正确方法。