2015-12-04 10 views
5

Napisałem aplikację w C#, który używa System.IO.GetDirectoires() i System.IO.GetFiles()montaż WinSCP .NET: Jak pobrać katalogi

Mam teraz do konwersji, które w użyciu SFTP. Mam doświadczenie z PutFiles i GetFiles z zestawu WinSCP .NET, ale nie mogę się dowiedzieć, jak uzyskać listę katalogów. W pliku winscp.exe znajduje się GetFiles, którego mogę użyć do plików, ale nie ma sposobu, aby uzyskać katalogi, o ile mogę powiedzieć. Czy ktoś ma na to sposób, czy jest to biblioteka, z którą łatwiej pracować.

// Setup session options 
SessionOptions sessionOptions = new SessionOptions 
{ 
    Protocol = Protocol.Sftp, 
    HostName = "example.com", 
    UserName = "user", 
    Password = "mypassword", 
    SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" 
}; 

using (Session session = new Session()) 
{ 
    // Connect 
    session.Open(sessionOptions); 
} 
+0

W jaki sposób łączysz się z serwerem FTP? Musisz pokazać nam kod, aby ci pomóc. –

+0

Im przy użyciu SFTP Session Edytowałem mój post przepraszam za złe formatowanie – user3753693

+1

Gotcha. Dodałem dodatkowy tag, aby pomóc temu pytaniu uzyskać więcej uwagi. –

Odpowiedz

3

Session.GetFiles z WinSCP .NET montażowych pobrań obu plików i podfolderów.


W rzeczywistości trzeba wyraźnie określić, kiedy nie chcesz ich pobierać.

Zobacz How do I transfer (or synchronize) directory non-recursively?


Jeśli chcesz do listy podfoldery w zdalnym katalogu, użyj Session.EnumerateRemoteFiles z EnumerationOptions.MatchDirectories i filtrować zestaw wyników do zapisów z RemoteFileInfo.IsDirectory:

IEnumerable<RemoteFileInfo> directories = 
    session.EnumerateRemoteFiles(path, null, EnumerationOptions.MatchDirectories). 
     Where(file => file.IsDirectory); 

ale znowu , nie musisz tego robić, aby pobrać katalogi, Session.GetFiles robi to za ciebie.

2

Spróbuj coś takiego

// Connect 
    session.Open(sessionOptions); 

    RemoteDirectoryInfo directory = 

    session.ListDirectory("/"); 

    foreach (RemoteFileInfo fileInfo in directory.Files) 
    { 
     Console.WriteLine("{0} with size {1}, permissions {2} and last modification at {3}", fileInfo.Name, fileInfo.Length, fileInfo.FilePermissions, fileInfo.LastWriteTime); 
    } 

także spróbować

string dumpCommand = "ls"; 
session.ExecuteCommand(dumpCommand)