flutter 如何获取包含文件的目录大小

oug3syen  于 2023-06-07  发布在  Flutter
关注(0)|答案(2)|浏览(413)

我想在flutter中得到一个目录的总大小,包括它的文件,它的子文件夹中的文件等等。
我尝试使用Directory.statSync,但它似乎只返回目录本身的 meta大小。
我应该递归地遍历目录来计算大小吗?如果是这样的话,有没有一个 dart 包已经做到了这一点(我找不到一个)?
如果没有,还有什么更有效的方法?

cygmwpex

cygmwpex1#

这是一个递归遍历目录的例子(同步版本).异步版本可以通过dir.list()及其listen()方法来实现。

Map<String, int> dirStatSync(String dirPath) {
  int fileNum = 0;
  int totalSize = 0;
  var dir = Directory(dirPath);
  try {
    if (dir.existsSync()) {
      dir.listSync(recursive: true, followLinks: false)
        .forEach((FileSystemEntity entity) {
          if (entity is File) {
            fileNum++;
            totalSize += entity.lengthSync();
          }
        });
    }
  } catch (e) {
    print(e.toString());
  }

  return {'fileNum': fileNum, 'size': totalSize};
}
fwzugrvs

fwzugrvs2#

如果使用fold(仅文件夹大小选项),则会更简洁一些

Future<int> getDirSize(Directory dir) async {
  var files = await dir.list(recursive: true).toList();
  var dirSize = files.fold(0, (int sum, file) => sum + file.statSync().size);
  return dirSize;
}

相关问题