如何以编程方式阅读Mac .textClipping文件?

时间:2011-05-20 13:40:10

标签: cocoa finder

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

textClipping文件是旧式的资源fork文件。您需要使用FSOpenResourceFile打开它,然后使用Get1Resource从文件中读取资源。该文件可能包含文本的几种不同资源类型:'RTF'(富文本),'utxt'(UTF-8),'utf8'(UTF-8)或'TEXT'(ASCII)类型资源,所有id为256.读取资源后,从Handle中提取数据并按照您的需要进行处理。

答案 1 :(得分:2)

看起来在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"];
}

答案 2 :(得分:1)

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

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

相关问题