This is an old revision of the document!
Session.FileTransferProgress Event
Occurs during file tranfer to report transfer progress. Occurs as part of either Session.GetFiles
, Session.PutFiles
or Session.SynchronizeDirectories
.
Advertisement
Syntax
C#
public delegate void FileTransferProgressEventHandler(object sender, FileTransferProgressEventArgs e); public event FileTransferredEventHandler FileTransferred;
VB.NET
Public Delegate Sub FileTransferProgressEventHandler( ByVal sender As Object, ByVal e As FileTransferProgressEventArgs) Public Custom Event FileTransferred As FileTransferredEventHandler
Remarks
See FileTransferProgressEventArgs
.
The event is raised, when starting transfer of every file, and then at most once a second for duration of the transfer.
See also Session.FileTransferred
.
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()) { // Will continuously report progress of transfer session.FileTransferProgress += SessionFileTransferProgress; // Connect session.Open(sessionOptions); try { // Download files and throw on any error session.GetFiles("/home/martin/public_html/*", "d:\\backup\\").Check(); } finally { // Terminate line after the last file (if any) if (_lastFileName != null) { Console.WriteLine(); } } } return 0; } catch (Exception e) { Console.WriteLine("Error: {0}", e); return 1; } } private static void SessionFileTransferProgress(object sender, FileTransferProgressEventArgs e) { // New line for every new file if ((_lastFileName != null) && (_lastFileName != e.FileName)) { Console.WriteLine(); } // Print transfer progress Console.Write("\r{0} ({1:P0})", e.FileName, e.FileProgress); // Remember a name of the last file reported _lastFileName = e.FileName; } private static string _lastFileName; }
Advertisement
VB.NET Example
Imports WinSCP Friend Class Example Public Shared Function Main() As Integer Try ' Setup session options Dim sessionOptions As New 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 Using session As New Session ' Will continuously report progress of transfer AddHandler session.FileTransferProgress, AddressOf SessionFileTransferProgress ' Connect session.Open(sessionOptions) Try ' Download files and throw on any error session.GetFiles( _ "/home/martin/public_html/*", "d:\backup\").Check() Finally ' Terminate line after the last file (if any) If _lastFileName IsNot Nothing Then Console.WriteLine() End If End Try End Using Return 0 Catch e As Exception Console.WriteLine("Error: {0}", e) Return 1 End Try End Function Private Shared Sub SessionFileTransferProgress( ByVal sender As Object, ByVal e As FileTransferProgressEventArgs) ' New line for every new file If (_lastFileName IsNot Nothing) AndAlso (_lastFileName <> e.FileName) Then Console.WriteLine() End If ' Print transfer progress Console.Write("\r{0} ({1:P0})", e.FileName, e.FileProgress) ' Remember a name of the last file reported _lastFileName = e.FileName End Sub Private Shared _lastFileName As String End Class
Advertisement
PowerShell Example
Learn more about using WinSCP .NET assembly from PowerShell.
# Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Session.FileTransferProgress event handler function FileTransferProgress { param($e) # New line for every new file if (($script:lastFileName -ne $Null) -and ($script:lastFileName -ne $e.FileName)) { Write-Host } # Print transfer progress Write-Host -NoNewline ("`r{0} ({1:P0})" -f $e.FileName, $e.FileProgress) # Remember a name of the last file reported $script:lastFileName = $e.FileName } # Main script $script:lastFileName = $Null try { $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 { # Will continuously report progress of transfer $session.add_FileTransferProgress( { FileTransferProgress($_) } ) # Connect $session.Open($sessionOptions) # Download the file and throw on any error $session.GetFiles("/home/martin/public_html/*", "d:\backup\").Check() } finally { # Terminate line after the last file (if any) if ($script:lastFileName -ne $Null) { Write-Host } # Disconnect, clean up $session.Dispose() } exit 0 } catch [Exception] { Write-Host $_.Exception.Message exit 1 }
Advertisement