3

如何检查资源叉子是否存在文件?

注意:不使用 CarbonCore->Resources.h 的 API,因为它们已被弃用。

我将能够打开存在或不存在资源叉的文件。但我需要检查资源分叉是否存在。这正是我正在寻找的。

4

3 回答 3

4

使用 getattrlist 或 fgetattrlist 在 attrList 参数中传递 ATTR_FILE_RSRCLENGTH。请参阅getattrlist 的手册页

于 2015-08-14T16:14:15.340 回答
1

或者

BOOL hasResourceFork = getxattr("/path/To/file", "com.apple.ResourceFork", NULL, 0, 0, 0) != -1;

这需要

#include <sys/xattr.h>
于 2017-06-14T21:44:28.073 回答
0

对于那些想要获得实际资源叉长度的人,这里是代码:

#include <sys/attr.h>

struct attrlist attrlist = {0};
attrlist.bitmapcount = ATTR_BIT_MAP_COUNT;
attrlist.fileattr    = ATTR_FILE_RSRCLENGTH;
typedef struct __attribute__((__packed__)) {
    uint32_t size;
    off_t forkSize;
} result_t;
result_t result = {0};
if (getattrlist (filepath, &attrlist, &result, sizeof(result), 0) == 0) {
    assert(sizeof(result)==result.size); // makes sure we got the struct right
    // now we find the rsrc fork size in result.forkSize
}
于 2019-04-08T11:51:21.940 回答