每当您将文本选择拖到 Finder 时,就会创建这些文件。文件大小始终为0 bytes
. 显然,数据存储在资源分支中。
我尝试阅读资源 fork[1],但得到错误代码-39
(文件结尾)。
这里有一些关于文件的更多细节:
$>xattr test.textClipping
com.apple.FinderInfo
com.apple.ResourceFork
每当您将文本选择拖到 Finder 时,就会创建这些文件。文件大小始终为0 bytes
. 显然,数据存储在资源分支中。
我尝试阅读资源 fork[1],但得到错误代码-39
(文件结尾)。
这里有一些关于文件的更多细节:
$>xattr test.textClipping
com.apple.FinderInfo
com.apple.ResourceFork
textClipping 文件是一种老式的资源派生文件。您需要使用 打开它FSOpenResourceFile
,然后使用Get1Resource
从文件中读取资源。该文件可能包含几种不同的文本资源类型:“RTF”(富文本)、“utxt”(UTF-8)、“utf8”(UTF-8)或“TEXT”(ASCII)类型的资源,所有id 为 256。读取资源后,从句柄中提取数据并按照您的意愿使用它。
看起来在 macOS 10.12 Sierra 中,一个 .textClipping 文件现在是一个属性列表。
根字典具有键“UTI-Data”。其中,键:com.apple.traditional-mac-plain-text、public.utf16-plain-text 和 public.utf8-plain-text 保存了几种不同的数据表示形式。
这是一个将从路径读取的示例:
NSString *path = @"/path/to/file.textClipping";
NSData *data = [NSData dataWithContentsOfFile:path];
id plist = [NSPropertyListSerialization propertyListWithData:data options:0 format:nil error:&error];
NSString *text;
if (plist && error == nil) {
NSDictionary *utiData = [plist objectForKey:@"UTI-Data"];
text = [utiData objectForKey:@"public.utf8-plain-text"];
}
查找FSOpenFork和FSReadFork。(Apple 有一个名为AudioCDSample的代码示例)。
还有一个可以读取这些文件的命令行工具(/usr/bin/DeRez),您可能想在 GDB 下查看它,但据我所知,它使用了已弃用的 API(即FSRead代替FSReadFork)。