/**\
|**| ここでは、プロパティリストを XML ファイルに保存
\**/
SInt32 SaveToXMLFile(
CFPropertyListRef pCFPRef,
CFStringRef pFilePathCFStrRef)
{
CFDataRef xmlCFDataRef;
CFURLRef myCFURLRef;
Boolean status;
SInt32 errorCode = noErr;
// プロパティリストを XML データに変換
xmlCFDataRef = CFPropertyListCreateXMLData(
kCFAllocatorDefault, pCFPRef);
// これから作成する XML データの保存先のファイルを
// 指定する URL を作成
myCFURLRef = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
pFilePathCFStrRef, // ファイルパス名
kCFURLHFSPathStyle,
false ); // ディレクトリか?
// XML データをファイルに書き込む
status = CFURLWriteDataAndPropertiesToResource (
myCFURLRef, // 使用する URL
xmlCFDataRef, // 書き込むデータ
NULL,
&errorCode);
// 解放する責任のあるすべての CF オブジェクトを解放
CFRelease(xmlCFDataRef);
CFRelease(myCFURLRef);
return errorCode;
}
/**\
|**| ここでは、XML ファイルをプロパティリストへロード
\**/
CFPropertyListRef LoadFromXMLFile(
CFPropertyListRef pCFPRef,
CFStringRef pFilePathCFStrRef)
{
CFURLRef myCFURLRef;
CFDataRef xmlCFDataRef;
CFPropertyListRef myCFPropertyListRef = NULL;
SInt32 errorCode = noErr;
Boolean status;
// XML データをロードする元のファイルを
// 指定する URL を作成
myCFURLRef = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
pFilePathCFStrRef, // ファイルパス名
kCFURLHFSPathStyle,
false ); // ディレクトリか?
// XML ファイルを読み取る
status = CFURLCreateDataAndPropertiesFromResource(
kCFAllocatorDefault,
myCFURLRef,
&xmlCFDataRef, // ファイルデータを置く場所
NULL,
NULL,
&errorCode);
if (!status)
{
CFStringRef errorString;
// XML データを使ってディクショナリを再構成
myCFPropertyListRef = CFPropertyListCreateFromXMLData(
kCFAllocatorDefault,
xmlCFDataRef,
kCFPropertyListImmutable,
&errorString);
}
// 解放する責任のあるすべての CF オブジェクトを解放
CFRelease(myCFURLRef);
CFRelease(xmlCFDataRef);
return myCFPropertyListRef;
}
|