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

时间:2015-04-18 12:53:44

标签: objective-c macos file applescript uti

在回答此question时,其中涉及将纯文本字符串写入带有非标准扩展名的文件。在这种情况下 .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];

发现生成的文件文本可以与Quicklook和TextEdit.app一起被自动设置为打开它的默认应用程序。

我意识到实际上afaik后者的行为是我应该期望的两个代码执行。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您无法动态,但如果您愿意,则必须设置文件的uti。您可以使用CoreServices框架在Objective-C Get the type of a file in Cocoa中执行此操作。您可以阅读有关uti' here的更多信息。

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

使用ASOC获取功能的简便方法当然是使用StandarAdditions命令来创建/写入文件。 :)

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

托米