【发布时间】:2014-09-15 23:30:10
【问题描述】:
基本上我在做以下事情:
- 将加密文件从网站下载到 MemoryStream 中
- 解密文件
- 将解密后的文件写入文件系统
- 将其作为 FileStream 再次读回内存
- 计算 MD5 并检查。
- 将文件发送到打印机。
这是我的代码:
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);
}
这似乎有点低效,除了如果可以避免的情况下要求不将文件写入文件系统这一事实。
所以我想知道是否可以在不将文件写入文件系统的情况下执行此操作?如果有怎么办?
【问题讨论】:
-
你能发布你当前的代码吗?
-
已添加代码。基本上,一旦我有了 FileStream,我就没事了。我只是不确定如何在不先写入文件系统的情况下到达那里(或者即使可能)。
标签: c# md5 filestream memorystream