如果我只需要知道文件是否是文件夹/符号链接(symbolic link)及其大小,是否可以使用更快的文件系统 API。我目前正在使用 [NSFileManager attributeOfItemAtPath...] 并且仅使用 NSFileSize 和 NSFileType。
是否有我应该使用的批量文件系统枚举 API?我怀疑这可能会更快,而无需跳入和跳出用户代码。
我的目标是快速递归目录以获取文件夹的真实文件大小,当前调用 attributeOfItemAtPath 是我的 95% 瓶颈。
我当前使用的一些代码:
NSDictionary* properties = [fileManager attributesOfItemAtPath:filePath error:&error];
long long fileSize = [[properties objectForKey:NSFileSize] longLongValue];
NSObject* fileType = [[properties objectForKey:NSFileType isEqual:NSFileTypeDirectory];
最佳答案
如果你想真正变得毛茸茸的,Mac OS 内核实现了一个独特的 getdirentriesattr()
系统调用将返回指定目录中的文件和属性列表。设置和调用很麻烦,并且并非所有文件系统都支持它(!),但如果您能让它为您工作,它可以显着加快速度。
还有一个密切相关的searchfs()
系统调用可用于快速搜索文件。它会遇到大多数相同的问题。
关于objective-c - OS X 文件系统 API 比重复调用 [NSFileManager attributeOfItemAtPath...] 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15103690/