2014-01-22 51 views
0

我正在为SFTP功能实现WinSCP .NET程序集。我能够建立会话,列出目录并将文件下载到\bin\x86\Debug,但由于某种原因,我无法将文件下载到我的本地驱动器上的bin\x86\Debug\edi目录中。无法使用WinSCP .NET程序集将文件下载到目录中

下载代码:

public static List<string> GetSFTP(string host, string user, string password, int port, string source, string dest, string remoteDest) 
{ 
    List<string> filenames = new List<string>(); 
    System.IO.Directory.CreateDirectory(dest); 

    SessionOptions winSCPSessionOptions = new SessionOptions(); 
    winSCPSessionOptions.HostName = host; 
    winSCPSessionOptions.Password = password; 
    winSCPSessionOptions.PortNumber = port; 
    winSCPSessionOptions.UserName = user; 
    winSCPSessionOptions.Protocol = WinSCP.Protocol.Sftp; 

    // This is a kind of dangerous setting, but as we do not have the host 
    // key fingerprints this allows us to connect without complaint. 
    winSCPSessionOptions.GiveUpSecurityAndAcceptAnySshHostKey = true; 

    Session session = new Session(); 
    session.Open(winSCPSessionOptions); 
    RemoteDirectoryInfo remoteDirInfo = session.ListDirectory(remoteDest); 
    foreach (RemoteFileInfo fileInfo in remoteDirInfo.Files) 
    { 
     if (fileInfo.Name.Equals(".") || fileInfo.Name.Equals("..")) { continue; } 
     Console.WriteLine("{0}", remoteDest + fileInfo.Name); 
     try 
     { 
      TransferOperationResult result = session.GetFiles(remoteDest + fileInfo.Name, dest+fileInfo.Name); 
      if (!result.IsSuccess) 
      { 
       Console.WriteLine("Failed to download!"); 
       foreach (SessionException ex in result.Failures) 
       { 
        Console.WriteLine(ex.ToString()); 
       } 
      } 
      else 
      { 
       Console.WriteLine("Successfully downloaded file!"); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
     } 

     filenames.Add(fileInfo.Name); 
    } 

    return filenames; 
} 

通过调用:

GetSFTP("sftp.server.com", "user", "password", 22, "/ProcessedFiles/", "edi/", "/ProcessedFiles/Processed/"); 

我已经试过:

GetSFTP("sftp.server.com", "user", "password", 22, "/ProcessedFiles/", "/edi/", "/ProcessedFiles/Processed/"); 
GetSFTP("sftp.server.com", "user", "password", 22, "/ProcessedFiles/", "\\edi\\", "/ProcessedFiles/Processed/"); 
GetSFTP("sftp.server.com", "user", "password", 22, "/ProcessedFiles/", "edi\\", "/ProcessedFiles/Processed/"); 

在任何情况下,我得到的变体光盘:下载到我的工作%2Fedi%2Ffilename.txt目录,而不是指定的路径。

+0

的 “目标+ fileInfo.Name” 语句是什么样子的调试? – cubitouch

+0

@cubitouch目的地是'edi /',文件名是'xxxx.ffv' - 输出到一个字符串对象,它看起来像:''edi/XXXX_56981769220131028142331306-0001-0000021-0202.ffv“' –

+0

究竟下载这个语句” GetSFTP(“sftp.server.com”,“user”,“password”,22,“/ ProcessedFiles /”,“\\ edi \\”,“/ ProcessedFiles/Processed /”);“ ?你正在谈论的究竟是什么? – cubitouch

回答

1

此代码应工作:

GetSFTP("sftp.server.com", "user", "password", 22, "/ProcessedFiles/", "edi\\", "/ProcessedFiles/Processed/"); 
+1

它与OP声称尝试的选项之一相同。所以它使这个问题无关紧要。 –

+0

另请注意,WinSCP .NET程序集需要源和目标的绝对路径。使用相对路径的结果是未定义的。 –

相关问题