在文件的获取信息中看到的文件类型

File type as seen in file's Get Info

我想获取某个路径下的文件类型 -- 与您从文件的获取信息中获取的措辞相同 window。

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

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

您可以使用如下代码获取 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 是否符合 您有兴趣以某种特定方式处理的 UTI。这样,如果文件的类型是您处理的文件的更具体的变体,您仍然会以这种方式处理它。例如,如果您以特定方式处理 public.plain-text 并且遇到类型为 public.objective-c-source 的文件,您仍然会处理它,因为它 是一个 普通文件文本文件。