Sample code for 30+ languages & platforms
Dart

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  final ftp = CkFtp2();

  ftp.hostname = 'ftp.example.com';
  ftp.username = 'login';
  ftp.password = 'password';

  ftp.keepSessionLog = true;

  // Connect and login to the FTP server.
  try {
    ftp.connect();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Set the current remote directory to the root of
  // the remote tree to be compared.
  try {
    ftp.changeRemoteDir('abc123');
  } on ChilkatException catch (e) {
    print(e.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.
  final mode = 1;
  final descendTree = true;
  final previewOnly = true;
  try {
    ftp.syncRemoteTree2('/temp/abc123', mode, descendTree, previewOnly);
  } on ChilkatException catch (e) {
    print(e.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:
  final sa = CkStringArray();
  sa.loadFromText(ftp.syncPreview);

  final fac = CkFileAccess();

  final numFiles = sa.count;
  var i = 0;
  var localFilePath = '';
  while (i < numFiles) {
    localFilePath = sa.getString(i);
    print(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:
    try {
      fac.fileDelete(localFilePath);
    } on ChilkatException {
      print('Failed to delete: $localFilePath');
    }

    i++;
  }

  ftp.disconnect();
}