문제

일부 파일을 특정 위치에 복사하는 응용 프로그램을 작성합니다. 사용자는 항상 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 원격 볼륨을 장착하는 올바른 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top