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

C# 如何传输(上传/下载)由于网络故障而停止的文件,必须从最后写入的字节恢复,c#,ftp,C#,Ftp,我在ftp和远程处理中做项目,我经常传输文件,如果需要的话发送文件 网络失败程序必须等待连接恢复,恢复后,它必须从最后一个字节写入的位置传输文件。如何做有什么想法吗 那么我该怎么做呢?我会检查文件,从总大小中减去大小,然后开始复制结果大小。它会起作用吗?你应该使用这样的方法,可以恢复中断的传输 标签c#真的是这里的要求吗 对不起,我帮不上忙# 编辑:是的,乔恩说的是真的 恢复的传输实际上不会从下一个字节开始。将快速检查上一个零件是否正确转移 您应该使用这样的方法来恢复中断的传输 标签c#真的是这

我在ftp和远程处理中做项目,我经常传输文件,如果需要的话发送文件 网络失败程序必须等待连接恢复,恢复后,它必须从最后一个字节写入的位置传输文件。如何做有什么想法吗


那么我该怎么做呢?我会检查文件,从总大小中减去大小,然后开始复制结果大小。它会起作用吗?

你应该使用这样的方法,可以恢复中断的传输

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

对不起,我帮不上忙#

编辑:是的,乔恩说的是真的


恢复的传输实际上不会从下一个字节开始。将快速检查上一个零件是否正确转移

您应该使用这样的方法来恢复中断的传输

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

对不起,我帮不上忙#

编辑:是的,乔恩说的是真的

恢复的传输实际上不会从下一个字节开始。将快速检查上一个零件是否正确转移

这不是C#解决方案,但做得很好

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

[编辑]如果您已成功建立FTP连接,则需要执行以下命令:

重新启动(休息)

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

我相信如果您还没有找到/编写一个解决方案,您可以使用它。

这不是一个C#解决方案,但它做得很好

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");
从编程角度讲,对于编写文件,我认为要恢复传输,您需要连接、读取文件(或者以其他方式,确定文件有多大),然后打开文件并附加剩余的数据。可能需要检查现有文件中的最后N个字节是否与本地文件中的字节匹配。读取类似-跳到文件的特定部分,然后开始回读

[编辑]如果您已成功建立FTP连接,则需要执行以下命令:

重新启动(休息)

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

如果您还没有找到/编写一个,我相信您可以使用它。

FileInfo finfo=newfileinfo(“E:\\butterfly.mpg”);
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");
FileInfo sourceinfo=newfileinfo(“H:\\butterfly.mpg”); int sourceLength=0; sourceLength=(int)sourceinfo.Length; int totalLength=(int)finfo.Length; 整数RemaingDatalength=0; RemaingDatalength=源长度-总长度; int appLength=0; 剩余整数=0; int bufferLength=12488; 字节[]缓冲区=新字节[bufferLength]; int指针=1; FileStream fsa=新文件流(“E:\\butterfly.mpg”,FileMode.Append); fss=新文件流(“H:\\butterfly.mpg”,FileMode.Open); while(指针!=0) { fss位置=(长)总长度; 读取(缓冲区,0,缓冲区长度); 总长度+=缓冲长度; 应用长度+=缓冲长度; 写入(缓冲区,0,缓冲区长度); 剩余=剩余数据长度-应用长度; if(剩余长度<缓冲区长度) { 字节[]buff=新字节[剩余]; fss.Read(buff,0,剩余); fsa.Write(buff,0,剩余); 打破 } } fss.Close(); fsa.Close(); MessageBox.Show(“文件传输完成”);
这是我通过远程发送文件时使用的方法。现在我正在FTP中尝试此方法; FileInfo sourceinfo=newfileinfo(“H:\\butterfly.mpg”); int sourceLength=0; sourceLength=(int)sourceinfo.Length; int totalLength=(int)finfo.Length; 整数RemaingDatalength=0; RemaingDatalength=源长度-总长度; int appLength=0; 剩余整数=0; int bufferLength=12488; 字节[]缓冲区=新字节[bufferLength]; int指针=1; FileStream fsa=新文件流(“E:\\butterfly.mpg”,FileMode.Append); fss=新文件流(“H:\\butterfly.mpg”,FileMode.Open); while(指针!=0) { fss位置=(长)总长度; 读取(缓冲区,0,缓冲区长度); 总长度+=缓冲长度; 应用长度+=缓冲长度;