سؤال

أنا أكتب تطبيقا لنسخ بعض الملفات إلى موقع معين. يسمح للمستخدم باختيار الوجهة، والتي هي دائما على مشاركة 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.. وبعد هل هذا هو الأفضل (أسهل، مجردة) لاستخدامها؟

هل كانت مفيدة؟

المحلول

تحتاج إلى استخدام بعض إجراءات إدارة الملفات ذات المستوى الأدنى للحصول على هذه المعلومات، لا توجد طريقة للقيام بذلك بمكالمات الكاكاو العادية. يتم الحصول على عنوان 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