문제
일부 파일을 특정 위치에 복사하는 응용 프로그램을 작성합니다. 사용자는 항상 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을 얻을 수 있다면 사용하여 마운트 할 수 있다고 생각합니다. fsmountservolumeasync. 사용하기 가장 좋은 (가장 쉽고 가장 추상화 된) API입니까?
해결책
이 정보를 얻으려면 일부 하위 수준 파일 관리자 루틴을 사용해야합니다. 일반 코코아 호출로는 할 수있는 방법이 없습니다. 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
원격 볼륨을 장착하는 올바른 방법입니다.
제휴하지 않습니다 StackOverflow