Sample code for 30+ languages & platforms
Xbase++

Delete Local Files that Do Not Exist on the FTP Server

See more FTP Examples

Demonstrates how to get a list of local files in a directory tree that do not exist on the FTP server.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oFtp
LOCAL nMode
LOCAL nDescendTree
LOCAL nPreviewOnly
LOCAL oSa
LOCAL oFac
LOCAL nNumFiles
LOCAL i
LOCAL cLocalFilePath

nSuccess := 0

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

oFtp := CreateObject("Chilkat.Ftp2")

oFtp:Hostname := "ftp.example.com"
oFtp:Username := "login"
oFtp:Password := "password"

oFtp:KeepSessionLog := 1

//  Connect and login to the FTP server.
nSuccess := oFtp:Connect()
IF (nSuccess != 1)
    ? oFtp:LastErrorText
    oFtp:destroy()
    RETURN
ENDIF

//  Set the current remote directory to the root of
//  the remote tree to be compared.
nSuccess := oFtp:ChangeRemoteDir("abc123")
IF (nSuccess != 1)
    ? oFtp:LastErrorText
    oFtp:destroy()
    RETURN
ENDIF

//  Recursively descend the local directory tree
//  and find the files that exist locally but not remotely.
//  These are the files what would be uploaded via
//  the SyncRemoteTree method call with mode = 1.
//  (Mode 1 would upload all files that do not exist on the FTP server.)

//  The actual uploading is avoided by setting the preview-only argument to 1.
nMode := 1
nDescendTree := 1
nPreviewOnly := 1
nSuccess := oFtp:SyncRemoteTree2("/temp/abc123", nMode, nDescendTree, nPreviewOnly)
IF (nSuccess != 1)
    ? oFtp:LastErrorText
    oFtp:destroy()
    RETURN
ENDIF

//  The files what would've been uploaded are now available in the SyncPreview property,
//  which contains a list of local file paths, one per line.
//  A program can iterate over them like this:
oSa := CreateObject("Chilkat.StringArray")
oSa:LoadFromText(oFtp:SyncPreview)

oFac := CreateObject("Chilkat.FileAccess")

nNumFiles := oSa:Count
i := 0

DO WHILE (i < nNumFiles)
    cLocalFilePath := oSa:GetString(i)
    ? cLocalFilePath

    //  An application can delete the file using Chilkat's file access object,
    //  or it can choose to use the native file API available in the programming language:
    nSuccess := oFac:FileDelete(cLocalFilePath)
    IF (nSuccess != 1)
        ? "Failed to delete: " + cLocalFilePath
    ENDIF

    i := i + 1
ENDDO

nSuccess := oFtp:Disconnect()

oFtp:destroy()
oSa:destroy()
oFac:destroy()