6

每当您将文本选择拖到 Finder 时,就会创建这些文件。文件大小始终为0 bytes. 显然,数据存储在资源分支中。

我尝试阅读资源 fork[1],但得到错误代码-39(文件结尾)。

这里有一些关于文件的更多细节:

$>xattr  test.textClipping 
com.apple.FinderInfo
com.apple.ResourceFork

[1] http://www.cocoadev.com/index.pl?UsingResourceForks

4

3 回答 3

5

textClipping 文件是一种老式的资源派生文件。您需要使用 打开它FSOpenResourceFile,然后使用Get1Resource从文件中读取资源。该文件可能包含几种不同的文本资源类型:“RTF”(富文本)、“utxt”(UTF-8)、“utf8”(UTF-8)或“TEXT”(ASCII)类型的资源,所有id 为 256。读取资源后,从句柄中提取数据并按照您的意愿使用它。

于 2011-05-22T04:58:34.457 回答
3

看起来在 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"];
}
于 2017-01-06T08:07:54.820 回答
2

查找FSOpenForkFSReadFork。(Apple 有一个名为AudioCDSample的代码示例)。

还有一个可以读取这些文件的命令行工具(/usr/bin/DeRez),您可能想在 GDB 下查看它,但据我所知,它使用了已弃用的 API(即FSRead代替FSReadFork)。

于 2011-05-21T13:14:58.417 回答