2016-11-17 84 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

相关问题