如何传输(上传/下载)由于网络故障而停止的文件,它必须从最后写入的字节恢复

时间:2009-09-16 12:50:43

标签: c# ftp

我在ftp和远程处理项目,我经常传输文件,而发送文件if 网络失败,程序必须等待,直到连接恢复,并且在恢复后,它必须从写入最后一个字节的地方传输文件。如何做任何想法。

所以我应该怎么做我将检查文件并获取大小从总大小中减去它并开始复制结果大小。它会起作用

4 个答案:

答案 0 :(得分:1)

您应该使用wget之类的方法来恢复中断传输。

标签c#真的是这里的要求吗?

抱歉,c#无法帮助

编辑:是的,Jon说的是真的。

恢复传输不会实际上从下一个字节开始。将快速检查前一部分是否已正确传输。

答案 1 :(得分:1)

这不是C#解决方案,但Getright做得非常好。

以编程方式,对于编写文件,我认为要恢复传输,您需要连接,读取文件(或以其他方式,确定它有多大),然后打开它并附加剩余数据。可能值得检查现有文件中的最后N个字节是否与本地文件中的N个字节匹配。阅读将类似 - 跳到文件的特定部分并开始回读。

[编辑] 如果您已设法建立FTP连接,则所需命令为REST

  

RESTART(REST)

     

参数字段表示要重新启动文件传输的服务器标记。此命令不会导致文件传输,但会将文件跳过指定的数据检查点。此命令后应紧跟相应的FTP服务命令,该命令将导致文件传输恢复。

如果您还没有找到/写过,我确定您可以使用a few simple C# ftp client libraries

答案 2 :(得分:1)

有一个开源的C#FTP库here

API表示Put方法“允许在当前文件存在时附加”。通过布尔参数。这可能就是你想要的。您需要做的就是重新上传,直到您成功完成转移事件。

答案 3 :(得分:0)

FileInfo finfo = new FileInfo("E:\\butterfly.mpg");
                FileInfo sourceinfo = new FileInfo("H:\\butterfly.mpg");
                int sourceLength = 0;
                sourceLength = (int)sourceinfo.Length;
                int totalLength = (int)finfo.Length;
                int RemaingDatalength = 0;
                RemaingDatalength = sourceLength - totalLength;
                int appLength = 0;
                int Remaining = 0;
                int bufferLength = 12488;
                byte[] buffer = new byte[bufferLength];
                int pointer = 1;
                FileStream fsa = new FileStream("E:\\butterfly.mpg", FileMode.Append);
                fss = new FileStream("H:\\butterfly.mpg", FileMode.Open);
                while (pointer != 0)
                {
                    fss.Position = (long)totalLength;
                    fss.Read(buffer, 0, bufferLength);
                    totalLength += bufferLength;
                    appLength += bufferLength;
                    fsa.Write(buffer, 0, bufferLength);
                    Remaining = RemaingDatalength - appLength;
                    if (Remaining < bufferLength)
                    {
                        byte[] buff = new byte[Remaining];
                        fss.Read(buff, 0, Remaining);
                        fsa.Write(buff, 0, Remaining);
                        break;
                    }
                }
                fss.Close();
                fsa.Close();
                MessageBox.Show("Filetransfer Completed");

这是我通过远程发送文件时使用的方法。现在我在FTP中尝试这个