首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件URL确定AFP共享

从文件URL确定AFP共享
EN

Stack Overflow用户
提问于 2010-02-11 17:43:48
回答 1查看 1.9K关注 0票数 2

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

我要完成的是当应用程序启动时,如果AFP共享没有挂载,我希望它自动挂载它。做这件事最好的方法是什么?

Get Info命令将服务器列为:afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup。如何以编程方式从文件URL获取此URL?我想如果我能得到这个URL,我就可以用FSMountServerVolumeAsync挂载它。这是最好的(最简单,最抽象的) API吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-12 23:24:37

您需要使用一些较低级别的文件管理器例程来获取此信息,常规的Cocoa调用无法做到这一点。URL是使用FSCopyURLForVolume()获取的,但您需要获取已挂载卷的卷引用号才能使用它:

代码语言:javascript
复制
#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绝对是挂载远程卷的正确方式。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2243531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档