Determinare AFP quota da un URL di file
Domanda
I scrivere un'applicazione per copiare alcuni file in una certa posizione. Esso consente all'utente di scegliere la destinazione, che è sempre in una condivisione AFP. Questo viene fatto con un NSOpenPanel. L'URL che viene restituito è:. file://localhost/Volumes/Oliver%20Legg's%20Backup/
Quello che voglio realizzare è quando viene avviata l'applicazione, se la condivisione AFP non è montato lo voglio montare automaticamente. Qual è il modo migliore per fare questo?
Il comando Get Info elenca il server come: afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup
. Come posso programatically ottenere questo URL da un URL di file? Penso che se potessi ottenere l'URL ho potuto montarlo utilizzando FSMountServerVolumeAsync . È che la migliore (più semplice più astratta,) API da utilizzare?
Soluzione
È necessario utilizzare alcune routine di livello inferiore File Manager per ottenere queste informazioni, non c'è modo di farlo con le chiamate di cacao regolari. L'URL si ottiene utilizzando FSCopyURLForVolume()
ma è necessario per ottenere un numero di riferimento del volume per il volume montato al fine di usarlo:
#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
è sicuramente il modo corretto per montare un volume remoto.