我编写的应用程序的一些文件复制到某一位置。它允许用户选择目的地,这始终是上AFP共享。这与NSOpenPanel完成。被返回的URL是:file://localhost/Volumes/Oliver%20Legg's%20Backup/

我想做到的是在应用程序启动时,如果AFP共享没有安装,我希望它会自动安装它。什么是做到这一点的最好方法是什么?

在获取信息命令列出了服务器为:afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup。我怎样才能得到编程从文件URL这个网址?我想,如果我能得到这个URL,我可以通过它的 FSMountServerVolumeAsync 。那是最好的(最简单,最抽象)API使用?

有帮助吗?

解决方案

您需要使用一些较低级别的文件管理器程序,以获取此信息,也没有办法与普通可可调用做到这一点。使用FSCopyURLForVolume()获得URL,但你需要获得一个音量的参考号所装载的卷,以便使用它:

#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绝对是装入一个远程体积的正确方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top