2016-11-17 11 views
1

SFTP 프로토콜을 사용하는 WinSCP .NET 어셈블리를 통해 파일 서버에 파일을 업로드하기 위해 C#에서 콘솔 응용 프로그램을 작성하고 있습니다. 서버에 연결하여 파일을 서버에 배치 할 수는 있지만 원하는 정확한 위치에 배치 할 수는 없습니다. 아래 코드를 찾아주세요 :SFTP 서버에서 WinSCP를 사용하여 C#을 통해 디렉토리 만들기

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.zip 같은 이름을 가진 Repository 폴더 수준에 배치지고

. 디렉토리가 서버에 존재하지 않으면 생성되지 않습니다.

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
  • 당신은 SFTP 디렉토리의 존재를 확인하기 위해 System.IO.Directory.Exists를 사용할 수 없으며 당신은 SFTP 서버의 디렉토리를 생성 할 System.IO.Directory.CreateDirectory를 사용할 수 있습니다. 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 (경로) ** 직후에 예외가 throw됩니다. 이 문제는 WinSCP 포럼에서도보고되었습니다. [여기] (https://winscp.net/forum/viewtopic.php?t=11193) – Jordan

관련 문제