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.writecrezând că adaugă: golește fișierul. Pentru adăugare esteFileMode.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.