在回答此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代码相同的行为。
答案 0 :(得分:2)
AppleScript正在将旧文件类型代码(OSType
四字符代码)设置为TEXT
,将创建者代码设置为ttxt
文件。这是一种弃用的机制,但它显然仍然被Launch Services使用。如果两者都存在,我不知道它的相对优先级与文件扩展名是什么。
您可以使用属性键NSFileManager
和-createFileAtPath:contents:attributes:
在-setAttributes:ofItemAtPath:error:
:NSFileHFSTypeCode
和NSFileHFSCreatorCode
的方法中的属性词典中指定文件类型和创建者代码。您可以使用[NSNumber numberWithUnsignedLong:'TEXT']
等方法构建值。
您可以使用mdls
命令查看系统可以从文件中提取的元数据属性。这将显示密钥kMDItemFSTypeCode
和kMDItemFSCreatorCode
下的文件类型和创建者代码。您还可以使用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
托米