Sample code for 30+ languages & platforms
Objective-C

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 Objective-C Downloads

Objective-C
#import <CkoFtp2.h>
#import <CkoStringArray.h>
#import <CkoFileAccess.h>
#import <NSString.h>

BOOL success = NO;

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

CkoFtp2 *ftp = [[CkoFtp2 alloc] init];

ftp.Hostname = @"ftp.example.com";
ftp.Username = @"login";
ftp.Password = @"password";

ftp.KeepSessionLog = YES;

//  Connect and login to the FTP server.
success = [ftp Connect];
if (success != YES) {
    NSLog(@"%@",ftp.LastErrorText);
    return;
}

//  Set the current remote directory to the root of
//  the remote tree to be compared.
success = [ftp ChangeRemoteDir: @"abc123"];
if (success != YES) {
    NSLog(@"%@",ftp.LastErrorText);
    return;
}

//  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 true.
int mode = 1;
BOOL descendTree = YES;
BOOL previewOnly = YES;
success = [ftp SyncRemoteTree2: @"/temp/abc123" mode: [NSNumber numberWithInt: mode] bDescend: descendTree bPreviewOnly: previewOnly];
if (success != YES) {
    NSLog(@"%@",ftp.LastErrorText);
    return;
}

//  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:
CkoStringArray *sa = [[CkoStringArray alloc] init];
[sa LoadFromText: ftp.SyncPreview];

CkoFileAccess *fac = [[CkoFileAccess alloc] init];

int numFiles = [sa.Count intValue];
int i = 0;
NSString *localFilePath = 0;
while ((i < numFiles)) {
    localFilePath = [sa GetString: [NSNumber numberWithInt: i]];
    NSLog(@"%@",localFilePath);

    //  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:
    success = [fac FileDelete: localFilePath];
    if (success != YES) {
        NSLog(@"%@%@",@"Failed to delete: ",localFilePath);
    }

    i = i + 1;
}

success = [ftp Disconnect];