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 YES.
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];