Search code examples
c#.netsftpwinscpwinscp-net

Check if any file with an extension exists on SFTP server using WinSCP .NET assembly


What is the C# code to check if any .xls files are in a remote SFTP folder using WinSCP .NET assembly? The xls files have different names, I only know the files I want will have am xls file extension.

string strFileRemote = @"/folder/*.xls";
// Set up session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = sftpHost,
    UserName = sftpUsername,
    SshHostKeyFingerprint = "value for finger print",
    SshPrivateKeyPath = @"\\file server\.ppk",
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Upload files
    TransferOptions transferOptions = new TransferOptions();
    transferOptions.TransferMode = TransferMode.Binary;

    TransferOperationResult transferResult;
    // Download
    transferResult =
        session.GetFiles(strFileRemote, strFileLocal, false, transferOptions);

    // Throw on any error
    transferResult.Check();
    if (transferResult.IsSuccess == false)
    {
        strStatus = "Error: " + transferResult.ToString();
    }
}

Solution

  • As suggested by WinSCP article on Checking file existence, use Session.EnumerateRemoteFiles to check, if any file matching a mask exists on am SFTP server:

    bool anyXmlExists =
        session.EnumerateRemoteFiles("/folder", "*.xml", EnumerationOptions.None).Any();