文件类型,如文件的获取信息中所示

时间:2015-02-13 04:47:06

标签: macos cocoa file-management fileinfo

我想在某个路径上获取某种文件 - 与从文件的“获取信息”窗口获得的文字相同。

然后我可以知道它是文档,脚本,二进制文件还是文件夹。我怎么能这样做?

NSString *path = [@"/Downloads/test.txt"];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&attributesError];

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码获取Finder中所示的文档类型:

NSURL* url = [NSURL fileURLWithPath:path];
NSString* documentKind;
NSError* error;
if ([url getResourceValue:&documentKind forKey:NSURLLocalizedTypeDescriptionKey error:&error])
{
    // use documentKind here
}
else
{
    /* handle error */
}

然而,文档类型适合制定程序化决策。首先,应该清楚,它是本地化的。这意味着它可能会根据系统语言进行更改。它也可以随OS的不同版本(对于系统定义的文档类型)或应用程序(对于应用程序定义的类型)而改变。

如果要对文件做出程序化决策,则应使用Uniform Type Identifier。要获得该功能,您可以使用与上述类似的代码,但使用NSURLTypeIdentifierKey键除外。您还可以使用-[NSWorkspace typeOfFile:error:]获取给定路径的类型。

要比较UTI,通常不应使用字符串相等。相反,您应该使用-[NSWorkspace type:conformsToType:]来查找某个文件的UTI 是否符合您想要以某种特定方式处理的文件。这样,如果文件的类型是您处理的类型的更具体的变体,您仍然会以这种方式处理它。例如,如果您以特定方式处理public.plain-text并遇到类型为public.objective-c-source的文件,那么您仍然会处理它,因为它纯文本文件。