使用 Quicklook 看到的带有非 .txt 扩展名的纯文本文件的奇怪案例

The curious case of Plain text files with non .txt extension seen with Quicklook

在回答此 时,涉及将纯文本字符串写入具有非标准扩展名的文件。在这种情况下 .meta 但它可以是任何东西。

我注意到当我使用 Applescript 代码写出文件时。:

set meta_text to "alt " & alt_text & return & "copyright " & copyrightText & return & "signature " & signatureText

        set meta_file to open for access meta_path with write permission
        write meta_text to meta_file
        close access meta_file

可以使用 Quicklook 查看生成的文件的文本,并且 TextEdit.app 自动设置为打开它的默认应用程序。

在我将代码更改为使用 Objective - C 之前,我没有想到任何事情。(实际上是 ApplescriptOBJC,但在所有意图和目的上都是一样的)

BOOL success = [meta_text writeToFile: meta_file atomically:YES encoding:NSUnicodeStringEncoding error:nil];

并发现生成的文件的文本 not 无法通过 Quicklook 看到并且 TextEdit.app 被 not 自动设置为默认应用打开它。

我意识到实际上 afaik 后一种行为是我对这两种代码执行的期望。

任何人都可以解释为什么存在这种差异以及如何获得 Objective - C 代码来设置(我假设)UTI,以便它也提供与 Applescript 代码相同的行为。

你不能即时,但如果你想,那么你必须设置文件的 uti。您将使用 CoreServices 框架在 Objective-C Get the type of a file in Cocoa. You can read more about uti's here.

中执行此操作

如果你读过 Nigel Garvey's post in Unscripted,你会看到他提到当你用 applescript 创建一个文本文件时,当你使用 open for access 命令(具有写入权限)时,文件会用 TextEdit 打开点击它。唯一的方法是将文件的 uti 设置为 public.text,(只要 RCDefaultsApp 没有被用来设置其他东西来打开文件。

获得 ASOC 功能的简单方法当然是对 creating/writing 文件使用 StandarAdditions 命令。 :)

Edit 正如 Ken Thomasses 在下面所写的那样,您可以使用 ttxt 的创建者类型,以使用 TextEdit 打开文件。 HTH

汤米

AppleScript 正在将文件上的旧文件类型代码(OSType 四字符代码)设置为 TEXT,并将创建者代码设置为 ttxt。这是一种已弃用的机制,但它显然仍被 Launch Services 使用。如果两者都存在,我不知道它的相对优先级与文件扩展名的相对优先级是什么。

您可以在NSFileManager方法中的属性字典中指定文件类型和创建者代码:-createFileAtPath:contents:attributes:-setAttributes:ofItemAtPath:error:使用属性键NSFileHFSTypeCodeNSFileHFSCreatorCode.您可以使用 [NSNumber numberWithUnsignedLong:'TEXT'].

之类的东西构造值

您可以使用mdls 命令查看系统可以从文件中提取哪些元数据属性。这将在键 kMDItemFSTypeCodekMDItemFSCreatorCode 下显示文件类型和创建者代码。您还可以使用 GetFileInfo 命令查看旧式文件信息(这些代码以及各种标志)。