2015-12-04 24 views
5

Ich schrieb eine Anwendung in C#, die System.IO.GetDirectoires() und System.IO.GetFiles() verwendetWinSCP .NET Assembly: Wie Verzeichnisse zum Download

Ich muss jetzt, dass konvertieren SFTP zu verwenden. Ich habe Erfahrung mit PutFiles und GetFiles von WinSCP .NET Assembly, aber ich kann nicht herausfinden, wie Sie eine Liste von Verzeichnissen erhalten. Es gibt eine GetFiles in der winscp.exe, die ich für die Dateien verwenden kann, aber es gibt keine Möglichkeit, die Verzeichnisse so weit zu bekommen, wie ich sagen kann. Hat jemand einen Weg dies zu tun oder gibt es eine Bibliothek, mit der man leichter arbeiten kann?

// 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

Wie verbinden Sie sich mit dem FTP-Server? Du musst Code zeigen, damit wir dir helfen können. –

+0

Ich benutze SFTP Session Ich habe meinen Post bearbeitet sorry über die schlechte Formatierung – user3753693

+1

Gotcha. Ich habe ein zusätzliches Tag hinzugefügt, um dieser Frage mehr Aufmerksamkeit zu geben. –

Antwort

3

Die Session.GetFiles von WinSCP .NET Assembly Downloads beide Dateien und Unterordner.


Eigentlich müssen Sie explizit angeben, wenn Sie sie nicht herunterladen möchten.

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


Wenn Sie Unterordner in einem Remote-Verzeichnis auflisten möchten, verwenden Sie die Session.EnumerateRemoteFiles mit EnumerationOptions.MatchDirectories und filtern, um die auf die Einträge gesetzt Ergebnis mit dem RemoteFileInfo.IsDirectory:

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

Aber wieder , Sie müssen dies nicht tun, um die Verzeichnisse herunterzuladen, die Session.GetFiles macht es für Sie.

2

Versuchen Sie etwas wie das

// 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); 
    } 

versuchen auch

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