我知道我可以使用File.Copy但是,我更感兴趣的是更长时间,只是出于教育目的。
现在,我想讨论的方法是使用StreamReader和StreamWriter(或FileStreams)。
在我看来,我会将文件(作为二进制文件)读入内存,然后将文件写入新位置。这使我感到因为可能会出现错误
1)整个文件被加载到内存中(我不知道文件有多大)和
2)与复制字节,粘贴字节(我假设流式传输的工作方式)相比,这将是耗时的,因为我们必须等待整个文件在粘贴甚至开始之前存储在内存中。
所以,还有很长的路要走,我将如何流式传输复制和粘贴作业?
答案 0 :(得分:4)
所以,还有很长的路要走,我将如何流式传输复制和粘贴作业?
不是将每个字节分别读入内存,也不是将整个文件读入内存,而是介于两者之间 - 创建一个缓冲区,例如: 32K,并要求输入流读取那么多数据。写出你读过的很多字节,然后重复,直到没有更多的数据要读。如下所示:
public void Copy(Stream input, Stream output)
{
byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
{
output.Write(buffer, 0, bytesRead);
}
}
这不像可能那样有效,因为你不是在同时阅读和写作。异步IO可以解决这个问题,但是让它更多更复杂 - 而且完全有可能操作系统足够聪明,无论如何都要继续阅读......
请注意,除非您实际阅读的是文字,否则您肯定希望使用Stream
而不是TextReader
/ TextWriter
。
答案 1 :(得分:2)
您可以以1 MB的块(例如)读/写文件。 MSDN has an example显示了如何做到这一点。
答案 2 :(得分:1)