FSPathMakeRef和FSGetCatalogInfo的Cocoa等价物是什么?

时间:2014-05-01 20:48:46

标签: c++ objective-c macos cocoa macos-carbon

我有一个使用 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功能?

1 个答案:

答案 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];