我想在某个路径上获取某种文件 - 与从文件的“获取信息”窗口获得的文字相同。
然后我可以知道它是文档,脚本,二进制文件还是文件夹。我怎么能这样做?
NSString *path = [@"/Downloads/test.txt"];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&attributesError];
答案 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
的文件,那么您仍然会处理它,因为它是纯文本文件。