2015-12-04 24 views
5

ho scritto un'applicazione in C# che utilizza System.IO.GetDirectoires() e System.IO.GetFiles()WinSCP .NET assembly: Come scaricare le directory

ora devo convertire tale da utilizzare SFTP. Ho esperienza con PutFiles e GetFiles dell'assembly WinSCP .NET, ma non riesco a capire come ottenere un elenco di directory. C'è un GetFiles nel winscp.exe che posso usare per i file, ma non c'è modo di ottenere le directory per quanto posso dire. Qualcuno ha un modo per farlo o c'è una libreria con cui è più facile lavorare.

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

Come ci si connette al server ftp? Devi mostrare un codice per noi per aiutarti. –

+0

Sto usando SFTP Session Ho modificato il mio post scusami per la cattiva formattazione – user3753693

+1

Gotcha. Ho aggiunto un tag extra per aiutare questa domanda a ottenere più attenzione. –

risposta

3

La Session.GetFiles di WinSCP NET assemblaggio download sia i file e sottocartelle.


In realtà, è necessario specificare esplicitamente, quando non si desidera scaricarli.

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


Se si desidera elencare le sottocartelle in una directory remota, utilizzare il Session.EnumerateRemoteFiles con EnumerationOptions.MatchDirectories e filtrare il set di risultati per le voci con il RemoteFileInfo.IsDirectory:

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

Ma ancora una volta , non è necessario eseguire questa operazione per scaricare le directory, lo Session.GetFiles lo fa per te.

2

provare qualcosa di simile

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

Anche provare

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