使用File.Copy移动文件或将流写入该位置有什么不同吗?

Pou*_*sen 4 c# io asp.net-4.0

我正在重构一些代码,有一个问题,我可以使用一些评论.

原始代码将文件下载到流中.然后,在使用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);

shr*_*iek 6

好吧,想想当你开始下载并覆盖现有文件时会发生什么,然后由于某种原因下载被中止,你将留下一个损坏的文件.但是,首先在另一个位置下载它并将其复制到目标目录会导致问题.

编辑:好的,现在看到代码.如果文件已经在MemoryStream中,那么实际上没有理由将文件写入临时位置并将其复制.你可以这样做File.WriteAllBytes(destination,stream.ToArray());