我想在flutter中得到一个目录的总大小,包括它的文件,它的子文件夹中的文件等等。我尝试使用Directory.statSync,但它似乎只返回目录本身的 meta大小。我应该递归地遍历目录来计算大小吗?如果是这样的话,有没有一个 dart 包已经做到了这一点(我找不到一个)?如果没有,还有什么更有效的方法?
Directory.statSync
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}; }
fwzugrvs2#
如果使用fold(仅文件夹大小选项),则会更简洁一些
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; }
2条答案
按热度按时间cygmwpex1#
这是一个递归遍历目录的例子(同步版本).异步版本可以通过dir.list()及其listen()方法来实现。
fwzugrvs2#
如果使用
fold
(仅文件夹大小选项),则会更简洁一些