请问一下用 Dart 怎么获取一个文件的MD5,又怎样获取文件一个分段的MD5值?
使用io读取文件内容,然后 crypto 库转换,以下是简单示例:
import 'dart:io';
import 'dart:convert';
import 'package:crypto/crypto.dart';
main(List<String> args) async {
// 默认文件/文本编码都为utf8
var file = File('test.txt');
print(md5.convert(file.readAsBytesSync())); // 同步
print(await md5.bind(file.openRead()).first); // 异步
print(md5.convert(utf8.encode(file.readAsLinesSync()[0]))); // 只转换第一行
}
1 个赞
非常感觉。
第二个异步,需不需要用isolate去做呢?如果不用比较大的文件会不会卡顿?
另外有没有办法可以获取到进度呢?
大文件肯定用异步好些,第二种方式不需要再开其他isolate,使用异步本就是为了防止阻塞当前isolate/线程阿
这个应该有点困难,crypto 库本身也不提供,需要自己封装了;我想到一个思路是,先获取文件总行数,然后通过crypto库的 Digest on chunked input 循环处理每行,通过总行数和当前行数就知道当前进度了。
是个办法,不知道性能有没问题。我试试。谢啦