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 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
                ' Will continuously report progress of transfer
                AddHandler mySession.FileTransferProgress, AddressOf SessionFileTransferProgress
 
                ' Connect
                mySession.Open(mySessionOptions)
 
                Try 
                    ' Download files and throw on any error
                    mySession.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
[Reflection.Assembly]::LoadFrom("WinSCPnet.dll") | Out-Null
 
# 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

Last modified: by martin