File.copy în Dart

copy face o copie a fișierului la altă cale; rename îl mută sau îl redenumește. Ambele returnează noul File.

Sintaxă
Future<File> copy(String newPath)
Future<File> rename(String newPath)

Ce face File.copy

copy(caleNoua) creează o copie a fișierului. Dacă la caleNoua există deja un fișier, acesta este suprascris. Fișierul original rămâne neschimbat.

rename(caleNoua) mută fișierul: îl redenumește în același director sau îl mută în alt director (dacă directorul există). Obiectul File vechi indică în continuare spre calea veche, care nu mai există; lucrează mai departe cu obiectul returnat.

Ambele au variantele sincrone copySync și renameSync. Între discuri diferite rename poate eșua; atunci faci copy urmat de delete.

Parametri

Parametru Descriere
newPath Calea de destinație.

Ce returnează

Un Future<File> cu fișierul de la noua cale.

Exemple

Exemplul 1: Copie de siguranță

import 'dart:io';

Future<void> main() async {
  final original = File('catalog.txt');
  await original.writeAsString('Ana 10\nIon 8\n');
  final copie = await original.copy('catalog.bak');
  await original.writeAsString('Ana 10\nIon 9\n');

  print('Original: ${(await original.readAsLines()).last}');
  print('Copie (${copie.path}): ${(await copie.readAsLines()).last}');
}

Rezultat

Original: Ion 9
Copie (catalog.bak): Ion 8

Exemplul 2: Redenumire și mutare în alt director

import 'dart:io';

Future<void> main() async {
  final poza = File('IMG_0042.jpg');
  await poza.writeAsBytes([1, 2, 3]);
  await Directory('vacanta').create();

  final noua = await poza.rename('vacanta/mare_constanta.jpg');
  print(noua.path);
  print('Vechea cale există: ${await poza.exists()}');
  print('Noua cale există: ${await noua.exists()}');
}

Rezultat

vacanta/mare_constanta.jpg
Vechea cale există: false
Noua cale există: true

Greșeli frecvente

  • Continui să folosești obiectul vechi după rename: indică spre o cale care nu mai există. Folosește obiectul returnat.
  • Copiezi peste un fișier important fără să verifici: copy suprascrie destinația fără întrebare.

Comenzi înrudite

  • File.delete: Șterge fișierul de pe disc (definitiv, nu în coș); aruncă eroare dacă fișierul nu există.
  • File.exists: Verifică dacă fișierul există pe disc; existsSync returnează direct true sau false.
  • Directory: Clasa Directory reprezintă un director (folder) de pe disc: îl creezi, îl listezi, verifici dacă există, îl ștergi.