Определите общий доступ AFP из URL файла - PullRequest
2 голосов
/ 11 февраля 2010

Я пишу приложение для копирования некоторых файлов в определенное место. Это позволяет пользователю выбрать пункт назначения, который всегда находится в общей папке 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 для использования?

1 Ответ

6 голосов
/ 12 февраля 2010

Вам нужно использовать некоторые низкоуровневые процедуры File Manager, чтобы получить эту информацию, нет способа сделать это с обычными вызовами Cocoa. 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 - определенно правильный способ подключения удаленного тома.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...