【发布时间】:2015-11-26 22:20:09
【问题描述】:
我正在学习 Vala,我正在尝试构建一个 Gtk+ Gui 来输出文件的 MD5 哈希值。 目前我正在使用valadoc.org 对我的应用程序进行编码,并且我正在使用 GLib.Checksum 来计算校验和。 GLib.Checksum 处理 MD5、SHA1、SHA256 和 SHA512(在文档中找到)。 所以我使用文档中的代码来计算输入文件路径的哈希值。我发现 Vala 没有自动释放 GChecksum,我也不会手动释放。
感谢您的帮助。
这是我的 Vala 代码:
private string HashSum( string path, string hash){
Checksum checksum = new Checksum(ChecksumType.MD5);
FileStream stream = FileStream.open(path, "rb");
//var stream = File.new_for_path(path).read();
uint8 fbuf[100];
size_t size;
while ((size = stream.read(fbuf)) > 0){
checksum.update(fbuf, size);
}
unowned string digest = checksum.get_string();
stdout.printf("%s: %s\n", path, digest);
return @"$hash hash: $digest";
}
【问题讨论】:
-
你是如何确定它没有被释放的?在生成的代码中,我看到生成了一个免费调用。你用的是什么版本的 Vala?
-
我正在使用 Vala 0.22.1。当我比较我的应用程序的输出 MD5sum 和我的 Ubuntu PC 中的 md5sum 时,我就知道了。这就是我认为校验和未被释放的方式:当我尝试进行多个总和时,输出会发生变化。今天当我打开我的电脑时,输出是正确的。当我使用 --pkg gtk+-3.0 重新编译我的应用程序时,输出改变了!我不知道为什么真的......我想这是一个释放的问题。
-
@apmasell:感谢您的回答!问题出在我的 valac 版本上。我将它升级到 Vala 0.30.0,现在输出是正确的。再次感谢。