我正在尝试使用Windows应用程序C#将我服务器上的大文件(5gb~50gb)从外部硬盘传输到外部硬盘。
用于传输文件的代码:
public void CopyFile(string source, string dest)
{
using (FileStream sourceStream = new FileStream(source, FileMode.Open))
{
byte[] buffer = new byte[64 * 1024]; // Change to suitable size after testing performance
using (FileStream destStream = new FileStream(dest, FileMode.Create))
{
int i;
while ((i = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
{
destStream.Write(buffer, 0, i);
//OnProgress(sourceStream.Position, sourceStream.Length);
}
}
}
}
但是这段代码的问题在于,当应用程序运行时,我的应用程序就会挂起(尽管文件仍然以低速传输)
是否有更好的方法从远程服务器复制大文件?
答案 0 :(得分:1)
您应该在单独的线程而不是当前的主应用程序线程中执行该操作,因为这是一个阻塞操作,您的应用程序将阻塞,直到传输完成。看一下BackgroundWorker,它运行在一个单独的线程上,你可以将进度报告发送回主线程,它可以派上用场,你甚至可以实现进度条。
答案 1 :(得分:0)
如果您正在进行winforms,请将其放在WHILE循环中:
Application.DoEvents();
它不会再阻止(冻结)。
答案 2 :(得分:0)
Checkout BITS(后台智能传输服务):
http://msdn.microsoft.com/en-us/library/aa363160(v=vs.85).aspx