This is an old revision of the document!
Session.ListDirectory Method
Lists the contents of specified remote directory.
Advertisement
Syntax
public RemoteDirectoryInfo ListDirectory(string path)
Public Function ListDirectory(ByVal path As String) As RemoteDirectoryInfo
Parameters
| Name | Description |
|---|---|
| string path | Full path to remote directory to be read. |
Return Value
Exceptions
| Exception | Condition |
|---|---|
| InvalidOperationException | Session is not opened. |
| SessionLocalException | Error communicating with winscp.com. See the exception documentation for details. |
| SessionRemoteException | Session has failed. Listing of remote directory has failed. See the exception documentation for details. |
| TimeoutException | Timeout waiting for winscp.com to respond. |
Advertisement
Remarks
You can use Session.EnumerateRemoteFiles method instead, if you want to:
- List only files matching a wildcard;
- List the files recursively;
- Have references to this (
.) and parent (..) directories be excluded form the listing.
Examples
C# Example
using System; using WinSCP; class Example { public static int Main() { try { // 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); RemoteDirectoryInfo directory = session.ListDirectory("/home/martin/public_html"); 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); } } return 0; } catch (Exception e) { Console.WriteLine("Error: {0}", e); return 1; } } }
Advertisement
VB.NET Example
Imports System Imports WinSCP Friend Class Example Public Shared Function Main() As Integer Try ' Setup session options Dim mySessionOptions As New SessionOptions With mySessionOptions .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" End With Using mySession As Session = New Session ' Connect mySession.Open(mySessionOptions) Dim directory As RemoteDirectoryInfo = mySession.ListDirectory("/home/martin/public_html") Dim fileInfo As RemoteFileInfo For Each 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) Next End Using Return 0 Catch e As Exception Console.WriteLine("Error: {0}", e) Return 1 End Try End Function End Class
PowerShell Example
Learn more about using WinSCP .NET assembly from PowerShell.
Advertisement
try { # Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp $sessionOptions.HostName = "example.com" $sessionOptions.UserName = "user" $sessionOptions.Password = "mypassword" $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" $session = New-Object WinSCP.Session try { # Connect $session.Open($sessionOptions) $directory = $session.ListDirectory("/home/martin/public_html") foreach ($fileInfo in $directory.Files) { Write-Host ("{0} with size {1}, permissions {2} and last modification at {3}" -f $fileInfo.Name, $fileInfo.Length, $fileInfo.FilePermissions, $fileInfo.LastWriteTime) } } finally { # Disconnect, clean up $session.Dispose() } exit 0 } catch [Exception] { Write-Host $_.Exception.Message exit 1 }
JScript (WSH) Example
In this example the JScript script is embedded into WSF file, to allow access to enumeration values.
Advertisement
<job> <reference object="WinSCP.Session"/> <script language="JScript"> try { // Setup session options var sessionOptions = WScript.CreateObject("WinSCP.SessionOptions"); sessionOptions.Protocol = Protocol_Sftp; sessionOptions.HostName = "example.com"; sessionOptions.UserName = "user"; sessionOptions.Password = "mypassword"; sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"; var session = WScript.CreateObject("WinSCP.Session"); try { // Connect session.Open(sessionOptions); var directoryInfo = session.ListDirectory("/home/martin/public_html") for (var enumerator = new Enumerator(directoryInfo.Files); !enumerator.atEnd(); enumerator.moveNext()) { var fileInfo = enumerator.item(); WScript.Echo( fileInfo.Name + " with size " + fileInfo.Length + ", permissions " + fileInfo.FilePermissions + " and last modification at " + fileInfo.LastWriteTime); } } finally { // Disconnect, clean up session.Dispose(); } } catch (e) { WScript.Echo("Error: " + e.message); WScript.Quit(1); } </script> </job>
VBScript (WSH) Example
In this example the VBScript script is embedded into WSF file, to allow access to enumeration values.
Advertisement
<job> <reference object="WinSCP.Session"/> <script language="VBScript"> Option Explicit ' Setup session options Dim sessionOptions Set sessionOptions = WScript.CreateObject("WinSCP.SessionOptions") With 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" End With Dim session Set session = WScript.CreateObject("WinSCP.Session") ' Connect session.Open sessionOptions Dim directoryInfo Set directoryInfo = session.ListDirectory("/home/martin/public_html") Dim fileInfo For Each fileInfo In directoryInfo.Files WScript.Echo fileInfo.Name & " with size " & fileInfo.Length & _ ", permissions " & fileInfo.FilePermissions & _ " and last modification at " & fileInfo.LastWriteTime Next ' Disconnect, clean up session.Dispose </script> </job>
Real-Life Examples
- Downloading the most recent file;
- Listing files matching wildcard;
- Search recursively for text in remote directory / Grep files over SFTP/FTP protocol;
- Recursively download directory tree with custom error handling;
- Find duplicate files in SFTP/FTP server;
- Custom directory listing format (CSV).
Advertisement