我有一个使用 Carbon 的C ++库代码库。我需要将其升级为 Cocoa ,因为我收到了这些警告:
警告:' FSPathMakeRef'不推荐使用:首先在OS X 10.8 [-Wdeprecated-declarations]中弃用 警告:' FSGetCatalogInfo'不推荐使用:首先在OS X 10.8 [-Wdeprecated-declarations]中弃用 警告:' FSSetCatalogInfo'不推荐使用:首先在OS X 10.8中弃用[-Wdeprecated-declarations]
以下是我使用这些功能的地方:
#ifdef MAC_LIKE
OSErr result;
OSType fileType;
FSCatalogInfo catalogInfo;
FSRef ref;
result = FSPathMakeRef(pathname, &ref, NULL);
BailError(result);
result = FSGetCatalogInfo(&ref, kFSCatInfoNodeFlags|kFSCatInfoFinderInfo, &catalogInfo,
NULL, NULL, NULL);
if (result) {
BailError(kNuErrFileStat);
}
/* Build the type and creator */
fileType = 0x70000000;
fileType |= (pRecord->recFileType & 0xFF) << 16;
fileType |= (pRecord->recExtraType & 0xFFFF);
/* Set the type and creator */
((FileInfo *) &catalogInfo.finderInfo)->fileType = fileType;
((FileInfo *) &catalogInfo.finderInfo)->fileCreator = 'pdos';
result = FSSetCatalogInfo(&ref, kFSCatInfoFinderInfo, &catalogInfo);
BailError(result);
#endif
我的问题是:
1)如何更改:
result = FSPathMakeRef(pathname, &ref, NULL);
不使用FSPathMakeRef
功能?
2)如何更改:
result = FSGetCatalogInfo(&ref, kFSCatInfoNodeFlags|kFSCatInfoFinderInfo, &catalogInfo,
NULL, NULL, NULL);
不使用FSGetCatalogInfo
功能?
3)如何更改:
result = FSSetCatalogInfo(&ref, kFSCatInfoFinderInfo, &catalogInfo);
不使用FSSetCatalogInfo
功能?
答案 0 :(得分:1)
NSFileManager
有获取和设置文件属性的方法,如文件类型和创建者。
示例(为简洁起见,省略了错误检查):
NSString *path = @"/path/to/your/file";
// Get file type and creator:
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
NSDictionary *attr = [fm attributesOfItemAtPath:path error:&error];
unsigned long type = [attr[NSFileHFSTypeCode] unsignedLongValue];
unsigned long creator = [attr[NSFileHFSCreatorCode] unsignedLongValue];
// Set a new type and creator:
type = 'ABCD';
creator = 'pdos';
attr = @{NSFileHFSTypeCode : @(type), NSFileHFSCreatorCode : @(creator)};
[fm setAttributes:attr ofItemAtPath:path error:&error];