Определите общий ресурс AFP по URL-адресу файла

StackOverflow https://stackoverflow.com/questions/2243531

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top