Pregunta

Me escribir una aplicación para copiar algunos archivos en un lugar determinado. Permite al usuario elegir el destino, que está siempre en una proporción de AFP. Esto se hace con un NSOpenPanel. La dirección URL que es retornada es:. file://localhost/Volumes/Oliver%20Legg's%20Backup/

Lo que quiero lograr es cuando se inicia la aplicación, si la cuota de la AFP no se monta quiero que se monte automáticamente. ¿Cuál es la mejor manera de hacer esto?

El comando muestra en Obtener información del servidor como: afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup. ¿Cómo puedo programáticamente obtener esta URL desde una dirección de fichero? Creo que si pudiera conseguir esa URL podía montarlo usando FSMountServerVolumeAsync. Es que el mejor (más fácil abstraída,) API para usar?

¿Fue útil?

Solución

Es necesario utilizar algunas rutinas de bajo nivel del gestor de archivos para obtener esta información, no hay manera de hacerlo con llamadas regulares de cacao. La URL se obtiene utilizando FSCopyURLForVolume() pero se necesita para obtener un número de referencia de volumen para el volumen montado con el fin de utilizarlo:

#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 es sin duda la forma correcta de montar un volumen remoto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top