Dart File Md5

#1

请问一下用 Dart 怎么获取一个文件的MD5,又怎样获取文件一个分段的MD5值?

#2

使用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赞
#3

非常感觉。
第二个异步,需不需要用isolate去做呢?如果不用比较大的文件会不会卡顿?

#4

另外有没有办法可以获取到进度呢?

#5

大文件肯定用异步好些,第二种方式不需要再开其他isolate,使用异步本就是为了防止阻塞当前isolate/线程阿

#6

这个应该有点困难,crypto 库本身也不提供,需要自己封装了;我想到一个思路是,先获取文件总行数,然后通过crypto库的 Digest on chunked input 循环处理每行,通过总行数和当前行数就知道当前进度了。

#7

是个办法,不知道性能有没问题。我试试。谢啦