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.createTempgarantează 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.