Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3/4 Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(PureBasic) SFTP Change Directory
This example answers a common question: "I use Chilkat SFTP to upload a file. It says it was successful, but file is not on the server. How do you change directories?";
First, "SFTP" is Secure File Transfer over SSH and has *nothing* to do with FTP (the File Transfer Protocol). It is completely unrelated to FTP. Therefore, FTP concepts such as "current directory", and "binary/ascii transfer modes" don't exist in SFTP.
In SFTP, you authenticate using a user account on the remote server. This could be an actual user account on the server, or a logical user account that exists in the context of the SSH server. In either case, the user account has a home directory. If you open a file on the SSH/SFTP server using only the filename and no path, then your filename will be placed in the user account's home directory. To find out the location of the home directory, call RealPath and pass "." for the directory path. It will return the absolute path of the home directory.
Given that there is no "current directory" concept in SFTP, you must specify either an absolute path or relative path when opening/creating a file that is to be in a directory other than the account's home directory. A relative path is relative to the home directory.
IncludeFile "CkSFtp.pb" Procedure ChilkatExample() ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. sftp.i = CkSFtp::ckCreate() If sftp.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Set some timeouts, in milliseconds: CkSFtp::setCkConnectTimeoutMs(sftp, 5000) CkSFtp::setCkIdleTimeoutMs(sftp, 10000) ; Connect to the SSH server. success.i = CkSFtp::ckConnect(sftp,"sftp.example.com",22) If success <> 1 Debug CkSFtp::ckLastErrorText(sftp) CkSFtp::ckDispose(sftp) ProcedureReturn EndIf ; Authenticate with the SSH server. Chilkat SFTP supports ; both password-based authenication as well as public-key ; authentication. This example uses password authenication. success = CkSFtp::ckAuthenticatePw(sftp,"myLogin","myPassword") If success <> 1 Debug CkSFtp::ckLastErrorText(sftp) CkSFtp::ckDispose(sftp) ProcedureReturn EndIf ; After authenticating, the SFTP subsystem must be initialized: success = CkSFtp::ckInitializeSftp(sftp) If success <> 1 Debug CkSFtp::ckLastErrorText(sftp) CkSFtp::ckDispose(sftp) ProcedureReturn EndIf ; To find the full path of our user account's home directory, ; call RealPath like this: absPath.s absPath = CkSFtp::ckRealPath(sftp,".","") If CkSFtp::ckLastMethodSuccess(sftp) <> 1 Debug CkSFtp::ckLastErrorText(sftp) CkSFtp::ckDispose(sftp) ProcedureReturn Else Debug absPath EndIf CkSFtp::ckDispose(sftp) ProcedureReturn EndProcedure
© 2000-2019 Chilkat Software, Inc. All Rights Reserved.