Sample code for 30+ languages & platforms
SQL Server

SFTP Get Size of File on Server

See more SFTP Examples

Demonstrates how to get the size of an existing file on the server.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- This example assumes the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @sftp int
    EXEC @hr = sp_OACreate 'Chilkat.SFtp', @sftp OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Set some timeouts, in milliseconds:
    EXEC sp_OASetProperty @sftp, 'ConnectTimeoutMs', 5000
    EXEC sp_OASetProperty @sftp, 'IdleTimeoutMs', 10000

    -- Connect to the SSH server.  
    -- The standard SSH port = 22
    -- The hostname may be a hostname or IP address.
    DECLARE @hostname nvarchar(4000)
    SELECT @hostname = 'sftp.example.com'
    DECLARE @port int
    SELECT @port = 22
    EXEC sp_OAMethod @sftp, 'Connect', @success OUT, @hostname, @port
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    -- Authenticate with the SSH server.  Chilkat SFTP supports
    -- both password-based authenication as well as public-key
    -- authentication.  This example uses password authenication.
    EXEC sp_OAMethod @sftp, 'AuthenticatePw', @success OUT, 'myLogin', 'myPassword'
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    -- After authenticating, the SFTP subsystem must be initialized:
    EXEC sp_OAMethod @sftp, 'InitializeSftp', @success OUT
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    -- Assuming we know the file size won't be too large, we get the size as a 32-bit integer.
    -- For SFTP, the remote file path is always either a path relative to the HOME directory of the user account, or an absolute path on the server.
    DECLARE @bFollowLinks int
    SELECT @bFollowLinks = 1
    DECLARE @bIsHandle int
    SELECT @bIsHandle = 0
    DECLARE @fileSize int
    EXEC sp_OAMethod @sftp, 'GetFileSize32', @fileSize OUT, 'someDir/someFile.dat', @bFollowLinks, @bIsHandle
    IF @fileSize < 0
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    PRINT 'file size = ' + @fileSize

    -- If the file size might be too large for a 32-bit signed integer, then get the size as a decimal string.
    -- You can convert the string to a 64-bit integer in your programming language.
    DECLARE @fileSizeStr nvarchar(4000)
    EXEC sp_OAMethod @sftp, 'GetFileSizeStr', @fileSizeStr OUT, 'someDir/someFile.dat', @bFollowLinks, @bIsHandle
    EXEC sp_OAGetProperty @sftp, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 = 0
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    PRINT 'file size = ' + @fileSizeStr

    -- You can alternatively get the size with an open file handle.
    DECLARE @handle nvarchar(4000)
    EXEC sp_OAMethod @sftp, 'OpenFile', @handle OUT, 'someDir/someFile.dat', 'readOnly', 'openExisting'
    EXEC sp_OAGetProperty @sftp, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    -- Get the size using the handle.
    SELECT @bIsHandle = 1
    EXEC sp_OAMethod @sftp, 'GetFileSize32', @fileSize OUT, 'someDir/someFile.dat', @bFollowLinks, @bIsHandle
    IF @fileSize < 0
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    PRINT 'file size = ' + @fileSize

    -- -----------------------------------------------------------------------------
    -- Don't forget to close the file handle.
    -- Otherwise open handles will accumulate on the server until eventually a limit
    -- is reached and the server will fail on a call to OpenFile.
    -- -----------------------------------------------------------------------------

    -- Close the file.
    EXEC sp_OAMethod @sftp, 'CloseHandle', @success OUT, @handle
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sftp
        RETURN
      END

    EXEC @hr = sp_OADestroy @sftp


END
GO