基本上我正在做以下事情:
这是我的代码:
private async void DownloadFileToBePrinted()
{
using (WebClient client = new WebClient())
{
var data = await client.DownloadDataTaskAsync(new Uri(Url));
using (var ms = new MemoryStream(data))
{
valid = DecodeFile(ms);
}
}
}
private bool DecodeFile(MemoryStream stream)
{
bool valid = true;
try
{
using (StreamReader reader = new StreamReader(stream))
{
stream.Position = 0;
var str = reader.ReadToEnd();
File.WriteAllBytes(FILE_TO_BE_PRINTED, this.Decode(str));
using (var md5 = MD5.Create())
{
using (var fs = File.OpenRead(FILE_TO_BE_PRINTED))
{
var hash = md5.ComputeHash(fs);
if (ByteToHex(hash) != FileDetails.MD5) // check against stored md5
valid = false;
}
}
}
}
catch(Exception ex)
{
valid = false;
}
return (valid);
}
这似乎有点低效,除了要求如果可以避免将文件写入文件系统这一事实。
所以我想知道是否可以在不将文件写入文件系统的情况下执行此操作?如果是这样的话?
答案 0 :(得分:1)
您可以在没有FileStream的情况下计算MD5,如下所示:
byte[] decoded = this.Decode(str);
var md5 = MD5.Create();
md5.ComputeHash(decoded);