连接备份后恢复上传文件

时间:2014-09-26 17:25:21

标签: c# methods console-application

我正在使用Kellerman .NET SFTP Library而我正在努力解决其中一种方法。

  

ResumeUploadFileAsync (Method)

根据documentation我可以在连接恢复后调用此方法恢复文件上传。

sftp.ResumeUploadFileAsync("c:\\uploadfile1.txt", "uploadfile1.txt");

也许我误解了ResumeUploadFileAsync的概念,但我想要完成的是在上传过程中如果我失去了互联网连接并且它在几分钟内完成我希望我的应用程序从哪里开始上传它离开了。

我是在C#控制台应用程序中编写的。

这是我采取的方法:

 public static void uploadToSFTP()
 {
   try
     {
            SFTP myConnection = new SFTP();
            myConnection.EnableLogging();
            myConnection.HostAddress = "tt-sftp";
            myConnection.UserName = "username";
            myConnection.Password = "pwd";
            myConnection.CurrentDirectory = "sam";
            myConnection.Connect();

           //upload file
            myConnection.UploadFileAsync(yesterdaysZipFile, localZipFileName);


            bool isConnected = false;

            while (myConnection.IsBusy == true)
            {
                //PRINT HOW LONG REMAINING FROM UPLOAD
                if (myConnection.IsConnected == true)
                {
                    Console.WriteLine(myConnection.EstimatedTimeRemaining);
                }
                else
                {
                    //check for connection
                    while (isConnected == false)
                    {
                        if (myConnection.IsConnected == true)
                        {
                            //resume the upload
                            myConnection.ResumeUploadFileAsync(yesterdaysZipFile, localZipFileName);
                            while (myConnection.IsBusy == true)
                            {
                                Console.WriteLine(myConnection.EstimatedTimeRemaining);
                            }
                            isConnected = true;
                        }
                        else
                        {
                            isConnected = false;
                        }

                    }
                }
            }
          List<FTPFileInfo> _files = myConnection.GetDirectoryListing();

          //there's more code here but it never gets to this point

        }
        catch (Exception ex)
        {
           Console.WriteLine(ex.ToString());
        }

我已启用日志记录以查看正在发生的事情。

当我失去与Internet的连接时,我得到以下错误,这是可以理解的。

  

消息:System.Net.Sockets.SocketException(0x80004005):没有这样的主机是kn   自己的

然后我启用了我的互联网连接,这就是我得到的:

  

打开“ ** @ tt-sftp”22
  0已连接
  通过:**

  0密码接受

  ReconnectRetry:强制连接成功
  ResumeUploadFileAsync \ tt-e \ CompressedArchive \ 20140926 \ 20140926.zip,
   20140926.zip   ReconnectRetry:pwd成功
  断开
  0与服务器断开连接   GetFileSize 20140926.zip
  打开“ ** @ tt-sftp”22
  0已连接
  通过:**

  0密码接受

  ReconnectRetry:重新连接成功
  PWD
  0当前目录是:“/”
  cd / sam
  cd / sam
  0目录现在/ sam
  stat 20140926.zip
  0目录现在/ sam
  0尺寸0
  00:00:00
  00:00:00
      消息:无法打开文件       资料来源:KellermanSoftware.NET-SFTP-Library       目标网站:       堆栈跟踪:在KellermanSoftware.NetSFtpLibrary.Implementation.ChannelSf       tp.put(InputStream src,String dst,SftpProgressMonitor监视器,Int32模式)       在KellermanSoftware.NetSFtpLibrary.Implementation.ExternalSFTPChannel.PutBin       ary(Stream localStream,String remoteFileName,Int64 restart,IFireProgress fire       进展)
      GetDirectoryListing sam /
      ls。 SAM /

当我去SFTP时,我实际上看到.zip文件,但它只包含一个文件(缺少其他文件)并且它已损坏。我无法查看它,也无法使用SFTP Client FileZilla将其下载回来。

有关如何使用我的方法解决此问题的任何建议,还是有更好的方法可以在互联网连接恢复后再次开始上传?

谢谢。

1 个答案:

答案 0 :(得分:0)

无需编码。它是图书馆的内置功能。我学到的东西很少:

sftp.ResumeUploadFileAsync("c:\\uploadfile1.txt", "uploadfile1.txt");

只有在程序中具有允许用户停止上传的功能时,才能使用此方法。这种方法可以让他们再次开始上传。

如果它是控制台应用程序并且您使用的是try {} catch {}语句,请确保Console.ReadLine()语句中包含catch。否则,应用程序将关闭,无法重试上传。