File.length în Dart

length dă mărimea fișierului în octeți; lastModified dă data și ora ultimei modificări.

Sintaxă
Future<int> length()
Future<DateTime> lastModified()

Ce face File.length

length() returnează numărul de octeți din fișier, nu de caractere: un text cu diacritice are mai mulți octeți decât litere. lastModified() returnează un DateTime cu momentul ultimei scrieri în fișier.

Ambele au variante sincrone (lengthSync, lastModifiedSync) și aruncă FileSystemException dacă fișierul nu există. Pentru mai multe informații dintr-un singur apel, vezi stat.

Ce returnează

length: Future<int>. lastModified: Future<DateTime>.

Exemple

Exemplul 1: Mărimea în octeți și în caractere

import 'dart:io';

Future<void> main() async {
  const text = 'Știință și tehnică';
  final f = File('titlu.txt');
  await f.writeAsString(text);
  print('Caractere: ${text.length}');
  print('Octeți pe disc: ${await f.length()}');
}

Rezultat

Caractere: 18
Octeți pe disc: 23

Exemplul 2: Este fișierul proaspăt?

Data exactă diferă la fiecare rulare, așa că afișăm doar dacă fișierul a fost modificat în ultimul minut.

import 'dart:io';

Future<void> main() async {
  final f = File('cache.json');
  await f.writeAsString('{}');
  final modificat = await f.lastModified();
  final vechime = DateTime.now().difference(modificat);
  print('Modificat în ultimul minut: ${vechime.inSeconds < 60}');
  print('Tip: ${modificat.runtimeType}');
}

Rezultat

Modificat în ultimul minut: true
Tip: DateTime

Exemplul 3: Mărime afișată prietenos

import 'dart:io';

String marime(int octeti) {
  if (octeti < 1024) return '$octeti B';
  if (octeti < 1024 * 1024) return '${(octeti / 1024).toStringAsFixed(1)} KB';
  return '${(octeti / 1024 / 1024).toStringAsFixed(1)} MB';
}

void main() {
  File('mic.txt').writeAsStringSync('salut');
  File('mediu.bin').writeAsBytesSync(List.filled(5000, 0));
  for (final nume in ['mic.txt', 'mediu.bin']) {
    print('$nume: ${marime(File(nume).lengthSync())}');
  }
}

Rezultat

mic.txt: 5 B
mediu.bin: 4.9 KB

Greșeli frecvente

  • Folosești length ca număr de caractere al textului. Este în octeți; pentru caractere citește textul și folosește .length pe String.
  • Scrii f.length fără paranteze: obții metoda, nu numărul. Apelează await f.length().

Comenzi înrudite

  • File.stat: Returnează dintr-un singur apel informațiile despre fișier: tip, mărime, date de modificare și permisiuni.
  • File.readAsBytes: readAsBytes citește un fișier ca octeți (imagini, arhive, orice fișier binar); writeAsBytes scrie octeți.
  • File: Clasa File reprezintă un fișier de pe disc prin calea lui; cu ea citești, scrii, copiezi și ștergi fișiere.