gpt4 book ai didi

cocoa - 从文件 URL 确定 AFP 共享

转载 作者:行者123 更新时间:2023-12-03 16:26:30 25 4
gpt4 key购买 nike

我编写了一个应用程序来将一些文件复制到某个位置。它允许用户选择始终位于 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 吗?

最佳答案

您需要使用一些较低级别的文件管理器例程来获取此信息,常规 Cocoa 调用无法做到这一点。使用 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 绝对是挂载远程卷的正确方法。

关于cocoa - 从文件 URL 确定 AFP 共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2243531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com