2014-04-15 1 views
1

다음은 내가 평신도 용어로 먼저 수행하고자하는 작업입니다. 파일을 가져오고 싶습니다. 하위 디렉토리가있는 경우 해당 하위 디렉토리에서도 파일을 가져 오려고합니다. Visual C++/CLI를 사용하여 프로그램하고 있으므로 .net 어셈블리를 사용하고 있습니다.WinSCP .NET 어셈블리 : 디렉터리 동기화의 FileMask가 작동하지 않습니다.

WinSCP에서는 Session.SynchronizeDirectories()을 사용합니다. 마지막 매개 변수는 TransferOptions (클래스)이며 일반적으로 null로 설정됩니다. 기본적으로 모든 파일이 전송된다는 의미입니다. 개체를 만들고 string FileMask 속성을 설정하면 특정 파일 만 전송할 수 있습니다. 나는이 프로그램을 실행하면

using (Session session = new Session()) 
{ 
    // Will continuously report progress of synchronization 
    session.FileTransferred += FileTransferred; 

    // Connect 
    session.Open(sessionOptions); 

    // Create a TransferOptions object 
    TransferOptions tro = new TransferOptions(); 
    tro.FileMask = "*.txt"; 
    tro.TransferMode = TransferMode.Automatic; 

    // Synchronize files 
    SynchronizationResult synchronizationResult; 
    synchronizationResult = 
     session.SynchronizeDirectories(
      SynchronizationMode.Local, @"C:\temp\win", "/C/Users/peter/Documents/WinSCP5.5.1/", 
      false, false, SynchronizationCriteria.Time, tro); 

    // Throw on any error 
    synchronizationResult.Check(); 
} 

, 현재 디렉토리와 하위 디렉토리에서 모든가 전송됩니다

그래서 나는 WinSCP C# example program로 변경!

이러한 옵션을 지정하는 데 문제가 있다고 생각합니다. 나는 WinSCP 프로그램을 사용한다. (WinSCP에 웹 사이트에 Transfer Settings Dialog 페이지 사진 참조 할 수 있습니다.) 나는 파일 마스크에 대해 다음 입력을 제외하고

모든 옵션은 명확하다 : *.txt

나는 전송을 시작하려면 확인 버튼을 클릭합니다. 미리보기 옵션이 있습니다. 그리고 내가 선택한 txt 파일 만 볼 수 있습니다. 서브 디렉토리에도 있습니다.

그래서 WinSCP 프로그램은 작동하지만 API는 작동하지 않습니까?

[편집] WinSCP 어셈블리 5.5.2 버전을 사용하고 있습니다.

+0

코드를 표시하십시오. –

+0

코드가 좋아 보입니다. 'Session.SessionLogPath'를 설정하고 로그를 공유하십시오. 예를 들어 pastebin.com을 사용합니다. –

+0

다음은 로그이며 http://pastebin.com/xR27KwBH에 있습니다. – user3454439

답변

0

마침내 나는 부활절 휴가 전에 일하게 만듭니다. 언젠가 @Martin과 일한 후에, 나는 문제를 통과한다. (내가 해결책을 찾았다 고 말하는 것은 아닙니다.) : (

어쨌든, WinSCP 5.5.2 버전의 소스 코드를 다운로드하고 닷 넷 버전 4에서 3.5 버전으로 프로젝트를 수정해야합니다. Visual Studio 2008을 사용할 때 원래 프로젝트에 포함 시키십시오 .. 컴파일하십시오 .. 좋아요. 출력 DLL을 사용하는 원래 프로젝트가 있습니다 .WinSCP EXE도 verison 5.5.2인지 확인하십시오. 파일 마스크가 작동 중입니다

소스 코드 프로젝트를 사용한 후 제거합니다 .5.5.2 DLL을 웹 사이트에서 다운로드 한 것을 사용합니다. 갑자기 30 초 정도가 필요합니다. 첫 번째 문을 실행합니다. 그런 다음 버전 5.5.1 EXE 및 DLL을 사용합니다. 동일한 지연. 5.5.3 EXE 및 DLL 전환하십시오. 같은 30 초 정도 지연. DLL을 제거하고 5.5.3 .net 어셈블리 소스 코드를 사용하십시오. 그것을 컴파일하십시오. 프로그램이 즉시 실행됩니다.

지금부터는 .net 어셈블리를 컴파일하고 사용하겠습니다.

도움을 주신 Martin.

관련 문제