2016-11-17 511 views
1

我們正在使用C#編寫控制檯應用程序,通過使用SFTP協議的WinSCP .NET程序集將文件上載到文件服務器。我能夠連接到服務器並將文件放置到服務器,但不是我想要的確切位置。請找到下面的代碼:通過C#在SFTP服務器上使用WinSCP創建目錄

其中

path = \Repository\Scan\Java\ant\UAT 
zippath = C:\Temp\UAT_17-11-2016-19_40_05.zip 
sftppath = \Repository\Scan\Java\ant\UAT\UAT_17-11-2016-19_40_05.zip 

ZIP文件得到放置在與名稱爲RepositoryScanJavaantUATUAT_17-11-2016-19_40_05.zipRepository文件夾級別。如果目錄在服務器上不存在,則它們不會被創建。

using (Session session = new Session()) 
{ 
    session.Open(sessionOptions); 
    { 
     if (System.IO.Directory.Exists(path)) 
     { 
      Console.WriteLine("That path exists already."); 
     } 
     else 
     { 
      DirectoryInfo di = System.IO.Directory.CreateDirectory(path); 
      Console.WriteLine(
       "The directory was created successfully at {0}.", 
       System.IO.Directory.GetCreationTime(path)); 
     } 

     try 
     { 
      Console.WriteLine("Put Files in the folder"); 
      TransferOptions transferOptions = new TransferOptions(); 
      transferOptions.TransferMode = TransferMode.Binary; 
      TransferOperationResult transferResult; 
      transferResult = session.PutFiles(zippath, sftppath, false, transferOptions); 
      transferResult.Check(); 
     }     
     catch (Exception e) 
     { 
      Console.WriteLine("The process failed: {0}", e.ToString()); 
     } 
    } 
} 

在此先感謝!

回答

1
  • 您不能使用System.IO.Directory.Exists檢查SFTP目錄的存在,也可以使用System.IO.Directory.CreateDirectory創建SFTP服務器上的目錄。使用WinSCP賦予Session.FileExistsSession.CreateDirectory方法:

    if (session.FileExists(path)) 
    { 
        Console.WriteLine("That path exists already."); 
    } 
    else 
    { 
        session.CreateDirectory(path); 
        Console.WriteLine("The directory was created successfully"); 
    } 
    
  • SFTP路徑使用斜槓,而不是反斜槓:

    path = /Repository/Scan/Java/ant/UAT 
    sftppath = /Repository/Scan/Java/ant/UAT/UAT_17-11-2016-19_40_05.zip 
    
+0

我曾嘗試使用你的建議,但它拋出一個異常與消息說:「不允許遞歸調用」。 – Jordan

+0

@Jordan你不能通過使用純粹的Q&A代碼來獲得這個例外。你的代碼必須更復雜。如果您遇到問題,請提出新問題。 –

+0

我很確定它只有你在這裏提出的代碼導致異常。我調試了它,異常在** session.FileExists(path)**被調用後立即拋出。這個問題在WinSCP論壇上也有報道,請查看[這裏](https://winscp.net/forum/viewtopic.php?t=11193) – Jordan

相關問題