我正在重构一些代码,有一个问题,我可以使用一些评论.
原始代码将文件下载到流中.然后,在使用File.Copy覆盖生产目录中的现有文件之前,它会将流写入临时目录中的File.
将它写入temp目录并使用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);
Run Code Online (Sandbox Code Playgroud)
只是将流写入目的地.
这只是我的代码,我会正确使用类似的东西 sourceFileStream.CopyToAsync(TargetFileStream);
好吧,想想当你开始下载并覆盖现有文件时会发生什么,然后由于某种原因下载被中止,你将留下一个损坏的文件.但是,首先在另一个位置下载它并将其复制到目标目录会导致问题.
编辑:好的,现在看到代码.如果文件已经在MemoryStream中,那么实际上没有理由将文件写入临时位置并将其复制.你可以这样做File.WriteAllBytes(destination,stream.ToArray());
| 归档时间: |
|
| 查看次数: |
1362 次 |
| 最近记录: |