Question

J'écriture d'une application pour copier des fichiers à un certain endroit. Il permet à l'utilisateur de choisir la destination, ce qui est toujours une part AFP. Cela se fait avec un NSOpenPanel. L'URL qui est renvoyée est:. file://localhost/Volumes/Oliver%20Legg's%20Backup/

Ce que je veux accomplir est lorsque l'application est lancée, si la part AFP n'est pas monté, je veux monter automatiquement. Quelle est la meilleure façon de le faire?

La liste commande Lire les informations du serveur comme: afp://Power Mac G5._afpovertcp.local/Oliver%20Legg's%20Backup. Comment puis-je obtenir cette URL à partir programatically une URL de fichier? Je pense que si je pouvais obtenir cette URL, je pouvais monter à l'aide de FSMountServerVolumeAsync . Est-ce le meilleur (le plus facile, plus abstraite) API à utiliser?

Était-ce utile?

La solution

Vous devez utiliser des routines de niveau inférieur File Manager pour obtenir ces informations, il n'y a aucun moyen de le faire avec des appels de cacao réguliers. L'URL est obtenue en utilisant FSCopyURLForVolume() mais vous devez obtenir un numéro de référence de volume pour le volume monté afin de l'utiliser:

#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 est sans aucun doute la bonne façon de monter un volume distant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top