FileMode în Dart

Modul în care se deschide un fișier: read (doar citire), write (golește și scrie), append (adaugă la final).

Sintaxă
static const FileMode read
static const FileMode write
static const FileMode append
static const FileMode writeOnly
static const FileMode writeOnlyAppend

Ce face FileMode

FileMode spune cum este deschis un fișier, la writeAsString, writeAsBytes, openWrite și open:

FileMode.read – doar citire; fișierul trebuie să existe. FileMode.write – citire și scriere; fișierul este creat dacă lipsește și golit dacă există (implicit la scriere). FileMode.append – citire și scriere; fișierul este creat dacă lipsește, iar ce scrii se adaugă la final. Variantele writeOnly și writeOnlyAppend sunt la fel, dar fără drept de citire.

Cu file.open(mode: …) primești un RandomAccessFile, pe care citești sau scrii la orice poziție. Încercarea de a scrie într-un fișier deschis cu FileMode.read aruncă FileSystemException.

Exemple

Exemplul 1: write față de append

import 'dart:io';

void main() {
  final f = File('cumparaturi.txt');
  f.writeAsStringSync('lapte\n', mode: FileMode.write);
  f.writeAsStringSync('pâine\n', mode: FileMode.append);
  f.writeAsStringSync('mere\n', mode: FileMode.append);
  print(f.readAsLinesSync());
  f.writeAsStringSync('doar asta\n', mode: FileMode.write);
  print(f.readAsLinesSync());
}

Rezultat

[lapte, pâine, mere]
[doar asta]

Exemplul 2: Deschidere doar pentru citire

RandomAccessFile citește de la orice poziție; scrierea în modul read este refuzată.

import 'dart:io';

Future<void> main() async {
  await File('cod.txt').writeAsString('RO-IS-2026');
  final raf = await File('cod.txt').open(mode: FileMode.read);
  try {
    await raf.setPosition(3);
    final octeti = await raf.read(2);
    print(String.fromCharCodes(octeti));
    await raf.writeString('X');
  } on FileSystemException catch (eroare) {
    print('Scriere refuzată: ${eroare.message}');
  } finally {
    await raf.close();
  }
}

Rezultat

IS
Scriere refuzată: writeFrom failed

Greșeli frecvente

  • Folosești FileMode.write crezând că adaugă: golește fișierul. Pentru adăugare este FileMode.append.
  • Deschizi cu open(mode: FileMode.read) un fișier care nu există: se aruncă PathNotFoundException (modul read nu creează fișiere).

Comenzi înrudite

  • File.writeAsString: Scrie un text într-un fișier: îl creează dacă nu există și îl suprascrie; cu mode: FileMode.append adaugă la final.
  • File.openWrite: Deschide fișierul pentru scriere și returnează un IOSink în care scrii pe bucăți; trebuie închis cu close().
  • IOSink: Destinația în care scrii text sau octeți: un fișier deschis (openWrite), stdout, stderr sau răspunsul HTTP.