很多文件的attributesOfItemAtPath

时间:2016-05-01 10:51:45

标签: ios objective-c nsfilemanager

我必须将来自webservice的数千个文件与iOS设备磁盘上的文件进行匹配。目前我正在循环中执行此操作并使用attributesOfItemAtPath上的shared NSFileManager验证磁盘上的每个文件,以检查是否有任何文件发生了更改,但感觉不对。也许循环遍历每个文件是最干净的方式,我仍然想知道是否有一种方法可以为某个目录中的每个文件(attributesOfItemAtPathNSArray)提前NSDictionary损害过多的磁盘I / O.

代码在循环中运行,然后对磁盘上的每个文件执行:

fileAttributes = [_Core.fileMgr attributesOfItemAtPath:savePath error:nil];

if ([fileAttributes fileSize] != [[image valueForKey:@"filesize"] intValue]) {
    ... // the file has changed or is new
}

我已经在考虑通过此循环重新加载应用程序来缓存最后已知的文件大小,但我仍然想知道是否有更有效的方式获取低级有效方式的许多文件的属性。

最后;这段代码没有给我慢度。我只是想知道是否有一种方法可以排除过多的磁盘I / O,因为有时这个脚本会下载数百或数千兆字节的图像,并且可能需要很长时间才能完成许多磁盘命中。也许在NSPathUtilities之类的非常低级别可能存在某种可能性?我宁愿缓存2~4MB的内存来缓存一个列表,然后在没有任何附加价值的情况下数千次访问磁盘。

1 个答案:

答案 0 :(得分:1)

每次重新启动应用程序时仍然需要执行循环,但是为了在应用程序运行时处理更改,您可以使用https://github.com/bdkjones/VDKQueue或任何其他队列系统来监视文件系统事件。

我不确定实际更改文件的内容,或者您​​是否有任何方法可以使用挂钩,只要设备发生更改,请记录更改,然后检查服务器的更改集。