Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loFtp
LOCAL lnMode
LOCAL lnDescendTree
LOCAL lnPreviewOnly
LOCAL loSa
LOCAL loFac
LOCAL lnNumFiles
LOCAL i
LOCAL lcLocalFilePath

lnSuccess = 0

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

loFtp = CreateObject('Chilkat.Ftp2')

loFtp.Hostname = "ftp.example.com"
loFtp.Username = "login"
loFtp.Password = "password"

loFtp.KeepSessionLog = 1

* Connect and login to the FTP server.
lnSuccess = loFtp.Connect()
IF (lnSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Set the current remote directory to the root of
* the remote tree to be compared.
lnSuccess = loFtp.ChangeRemoteDir("abc123")
IF (lnSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
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.
lnMode = 1
lnDescendTree = 1
lnPreviewOnly = 1
lnSuccess = loFtp.SyncRemoteTree2("/temp/abc123",lnMode,lnDescendTree,lnPreviewOnly)
IF (lnSuccess <> 1) THEN
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
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:
loSa = CreateObject('Chilkat.StringArray')
loSa.LoadFromText(loFtp.SyncPreview)

loFac = CreateObject('Chilkat.FileAccess')

lnNumFiles = loSa.Count
i = 0

DO WHILE (i < lnNumFiles)
    lcLocalFilePath = loSa.GetString(i)
    ? lcLocalFilePath

    * 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:
    lnSuccess = loFac.FileDelete(lcLocalFilePath)
    IF (lnSuccess <> 1) THEN
        ? "Failed to delete: " + lcLocalFilePath
    ENDIF

    i = i + 1
ENDDO

lnSuccess = loFtp.Disconnect()

RELEASE loFtp
RELEASE loSa
RELEASE loFac