Хранение ссылок на файл в CFPreferences
Q: Что самый устойчивый путь состоит в том, чтобы сохранить ссылку на файл в CFPreference?
A: Что самый устойчивый путь состоит в том, чтобы сохранить ссылку на файл в CFPreference?
Преобразуйте свою ссылку на файл в дескриптор Псевдонима; создайте CFData с содержанием того дескриптора Псевдонима и затем используйте CFPreferencesSetAppValue и CFPreferencesAppSynchronize для хранения его в предпочтительный файл.
Первое перечисление показывает, как сохранить Ссылку на файл на Предпочтительный файл и второе, как перезагрузить Ссылку на файл от Предпочтительного Файла.
Перечисление 1 , Сохраняющее ссылку на файл в CFPreference:
/*****************************************************
*
* SaveFSRefToPref(inFSRef, inKey)
*
* Purpose: Saves a file reference in an application preference
*
* Inputs: inFSRef - The file reference
* inKey - the preference key
*
* Returns: none
*/
void SaveFSRefToPref(const FSRef* inFSRef,
const CFStringRef inKey)
{
AliasHandle tAliasHdl;
OSErr err = FSNewAlias(NULL, inFSRef, &tAliasHdl);
require_noerr(err, CantCreateAlias);
CFDataRef tCFDataRef;
tCFDataRef = CFDataCreate(kCFAllocatorDefault,
(UInt8*) *tAliasHdl,
GetHandleSize((Handle) tAliasHdl));
require(NULL != tCFDataRef, CantCreateCFData);
// set the preferences
CFPreferencesSetAppValue( inKey,
tCFDataRef,
kCFPreferencesCurrentApplication);
// sync to disk
CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
CFRelease(tCFDataRef);
CantCreateCFData:
DisposeHandle((Handle) tAliasHdl);
CantCreateAlias:
return;
} |
Восстановить Вашу ссылку на файл от предпочтения:
Перечисление 2 , Восстанавливающее ссылку на файл:
/*****************************************************
*
* LoadFSRefFromPref(inFSRef, inKey)
*
* Purpose: Loads a file reference from an application preference
*
* Inputs: outFSRef - Address where to store the file reference
* inKey - the preference key
*
* Returns: Boolean - true if the load was successful
*/
Boolean LoadFSRefFromPref(FSRef* outFSRef, CFStringRef inKey)
{
Boolean result = false; // assume failure (pessimist!)
CFDataRef tCFDataRef;
tCFDataRef = (CFDataRef) CFPreferencesCopyAppValue(
inKey,
kCFPreferencesCurrentApplication);
require(NULL != tCFDataRef, CantGetPreference);
CFIndex dataSize = CFDataGetLength(tCFDataRef);
AliasHandle tAliasHdl = (AliasHandle) NewHandle(dataSize);
require(NULL != tAliasHdl, CantAllocateAlias);
CFDataGetBytes(tCFDataRef,
CFRangeMake(0, dataSize),
(UInt8*) *tAliasHdl);
FSRef tFSRef;
Boolean wasChanged;
OSErr err = FSResolveAlias(NULL,
tAliasHdl,
outFSRef,
&wasChanged);
if (noErr == err) result = true;
DisposeHandle((Handle) tAliasHdl);
CantAllocateAlias:
CFRelease(tCFDataRef);
CantGetPreference:
return result;
} |
История версии документа
| Дата | Примечания |
|---|---|
| 23.02.2005 | Третий параметр к «FSResolveAlias (NULL, tAliasHdl, &outFSRef, &wasChanged)»; не требует «и»: «FSResolveAlias (NULL, tAliasHdl, outFSRef, &wasChanged)»; |
| 01.10.2004 | Новый документ, что хранящий ссылки на файл в CFPreferences |