【发布时间】:2013-01-12 19:00:42
【问题描述】:
我正在做 SDCARD 扫描仪,它扫描每个文件夹和图像文件。
我正在使用 C 代码并使用 opendir、readdir、fopen API 来枚举目录和打开的文件。我有不同的 DIR 变量。
问题是 fopen() 花费了太多时间(10000 个文件需要 300 秒),而导向器遍历需要大约 25 秒。
是否有任何 API 可以让我加快文件打开操作,使用句柄、dir_ino 或类似名称,以便我可以使用目录句柄或类似名称打开文件。
到目前为止,我已经尝试过使用 dirent->dir_ino, DIR* 但没有运气。
我正在寻找比 fopen 花费更少的时间的低级 api。
编辑 fts 和 ftw api 有用吗?它们似乎仅与遍历目录有关...还有其他 hack 或方法吗?
【问题讨论】:
-
在我编辑之前,为什么是Android标签?
-
速度限制不是来自 API,而是来自 SD 卡本身。
-
@Simon 我猜,因为它在 Android 系统上。
-
@mouviciel: 对,但是
fopen需要一个文件名,这意味着它将重新访问程序刚刚查找的目录列表(可能有几个级别,因此扫描多个目录) .这可能会或可能不会花费大量成本,您可能希望文件系统或块设备通过缓存目录列表来避免不必要的磁盘(卡)活动。如果你真的很幸运,Android 会提供一些保证。 -
@SteveJessop okey dokey,只是检查一下。