Sample code for 30+ languages & platforms
Dart

Control ASCII Download Line Endings (CrlfMode)

See more FTP Examples

Demonstrates the CrlfMode property, which controls line-ending conversion when downloading in ASCII transfer mode: 0 leaves them as received, 1 converts to CRLF, 2 to LF, and 3 to CR.

Background: When you deliberately download text in ASCII mode, CrlfMode lets you force the saved file's line endings to a specific convention — CRLF for Windows tools, LF for Unix — regardless of what the server sends. It applies only in ASCII mode, so pair it with SetTypeAscii; in the recommended default binary mode, bytes are preserved verbatim and this setting has no effect. Reserve ASCII mode (and this property) for the rare case where line-ending normalization of text is actually wanted.

Chilkat Dart Downloads

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

void main() {
  final ftp = CkFtp2();

  ftp.hostname = 'ftp.example.com';
  ftp.username = 'myFtpLogin';

  // Normally you would not hard-code the password in source.  You should instead obtain it
  // from an interactive prompt, environment variable, or a secrets vault.
  ftp.password = 'myPassword';

  try {
    ftp.connect();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // CrlfMode controls line-ending conversion for ASCII-mode downloads:
  //   0 = leave line endings as received (default)
  //   1 = convert to CRLF
  //   2 = convert to LF
  //   3 = convert to CR
  // Convert a downloaded text file's line endings to CRLF (useful when saving for Windows).
  ftp.crlfMode = 1;

  // CrlfMode applies only in ASCII transfer mode.
  try {
    ftp.setTypeAscii();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  try {
    ftp.getFile('public_html/readme.txt', 'qa_output/readme.txt');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Downloaded with CRLF line endings.');

  try {
    ftp.disconnect();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }
}