Directory.createTemp în Dart

createTemp creează un director nou cu nume unic; Directory.systemTemp este directorul temporar al sistemului.

Sintaxă
Future<Directory> createTemp([String? prefix])
Directory createTempSync([String? prefix])
static Directory get systemTemp

Ce face Directory.createTemp

Directory.systemTemp (static) returnează directorul pentru fișiere temporare al sistemului: /tmp pe Linux, un director din /var/folders pe macOS, %TEMP% pe Windows.

d.createTemp('prefix') creează în directorul d un subdirector nou cu un nume unic, format din prefix și câteva caractere aleatorii (de exemplu raport_AbX3k9). Combinația Directory.systemTemp.createTemp('ceva_') este felul corect de a obține un loc de lucru temporar, fără conflicte cu alte programe.

Directoarele temporare nu se șterg singure la ieșirea programului: șterge-le tu cu delete(recursive: true), ideal într-un bloc finally.

Parametri

Parametru Descriere
prefix Opțional. Începutul numelui directorului creat.

Ce returnează

createTemp: Future<Directory> cu noul director. systemTemp: un Directory.

Exemple

Exemplul 1: Lucru într-un director temporar

Numele exact este aleator, așa că afișăm doar prefixul și verificările.

import 'dart:io';

Future<void> main() async {
  print('systemTemp există: ${Directory.systemTemp.existsSync()}');
  final tmp = await Directory.systemTemp.createTemp('raport_');
  try {
    final nume = tmp.path.split(Platform.pathSeparator).last;
    print('Începe cu raport_: ${nume.startsWith('raport_')}');
    await File('${tmp.path}/date.csv').writeAsString('Ana,10\n');
    print(await File('${tmp.path}/date.csv').readAsString());
  } finally {
    await tmp.delete(recursive: true);
  }
  print('Șters: ${!tmp.existsSync()}');
}

Rezultat

systemTemp există: true
Începe cu raport_: true
Ana,10

Șters: true

Exemplul 2: Două directoare temporare au nume diferite

import 'dart:io';

void main() {
  final a = Directory.current.createTempSync('test_');
  final b = Directory.current.createTempSync('test_');
  print(a.path != b.path);
  print(Directory.current.listSync().length);
  a.deleteSync();
  b.deleteSync();
}

Rezultat

true
4

Greșeli frecvente

  • Construiești singur un nume ca /tmp/raport. Două rulări simultane folosesc același director și își strică datele. createTemp garantează un nume unic.
  • Nu ștergi directorul temporar la final și se adună gunoi pe disc.

Comenzi înrudite

  • Directory.create: create face un director nou (și părinții lui, cu recursive: true); delete șterge directorul, cu tot conținutul dacă e recursiv.
  • File.delete: Șterge fișierul de pe disc (definitiv, nu în coș); aruncă eroare dacă fișierul nu există.
  • Directory.current: Directorul curent al programului, față de care se interpretează căile relative; se poate și schimba.