我正在重构一些代码,并且有一个问题,我可以对其进行一些评论。
原始代码将文件下载到流中。然后,它将流写入临时目录中的文件,然后使用 File.Copy 覆盖生产目录中的现有文件。
首先将其写入临时目录并使用 File.Copy 与立即将流写入生产目录相比有什么好处吗?
原因之一可能是 File.Copy 比写入流更快,并且减少了有人在写入文件时读取文件的机会。但这真的会发生吗?我还应该考虑什么。我正在考虑排除临时目录。
MemoryStream stream = new MemoryStream();
....Download and valiate stream....
using (Stream sourceFileStream = stream)
{
using (FileStream targetFileStream = new FileStream(tempPath, FileMode.CreateNew))
{
const int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
while (true)
{
int read = sourceFileStream.Read(buffer, 0, bufferSize);
targetFileStream.Write(buffer, 0, read);
if (read == 0)
break;
}
}
}
File.Copy(tempPath, destination, true);
与仅将流写入目的地相反。
这只是我的代码,我会正确使用类似的代码sourceFileStream.CopyToAsync(TargetFileStream);
好吧,想想当您开始下载并覆盖现有文件时会发生什么,然后由于某种原因下载被中止,您将留下一个损坏的文件。
但是,首先将其下载到另一个位置并将其复制到目标目录会解决问题。
编辑:好的,现在看到代码了。如果文件已经在 MemoryStream 中,则确实没有理由将文件写入临时位置并将其复制过来。你可以这样做File.WriteAllBytes(destination,stream.ToArray());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)