使用C#在远程服务器上复制大文件

时间:2014-01-09 01:18:52

标签: c# winforms

我正在尝试使用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);
                }
            }
        }
    }

但是这段代码的问题在于,当应用程序运行时,我的应用程序就会挂起(尽管文件仍然以低速传输)

是否有更好的方法从远程服务器复制大文件?

3 个答案:

答案 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