2013-03-08 9 views

Odpowiedz

6

Prosty kod:

import 'dart:io'; 

void createFileRecursively(String filename) { 
    // Create a new directory, recursively creating non-existent directories. 
    new Directory.fromPath(new Path(filename).directoryPath) 
     .createSync(recursive: true); 
    new File(filename).createSync(); 
} 

createFileRecursively('foo/bar/baz/bleh.html'); 
+0

Chciałbym wiedzieć, w jaki sposób określasz uprawnienia do plików w tych katalogach. Wygląda na to, że niekoniecznie dziedziczą po rodzicu. – sager89

3

Alternatywnie:

new File('path/to/file').create(recursive: true); 

Lub:

new File('path/to/file').create(recursive: true) 
.then((File file) { 
    // Stuff to do after file has been created... 
}); 

Recursive oznacza, że ​​jeśli plik lub ścieżka nie istnieje, to zostanie bądź kreatywny. Zobacz: https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-io.File#id_create

EDYCJA: W ten sposób nowy katalog nie musi być wywoływany! Możesz to zrobić także synchronicznie, jeśli zechcesz:

new File('path/to/file').createSync(recursive: true); 
+0

Jest to w zasadzie taka sama odpowiedź jak w @JuniperBelmont z rozróżnieniem, że 'create' jest używane zamiast' createSync'. Korzystanie z async API nie zawsze jest bardziej efektywne, ponieważ niedawna dyskusja ukazała się szczególnie w przypadku działań, które nie wymagają czasochłonnych operacji (pełna dyskusja: https://groups.google.com/a/dartlang.org/forum/#! topic/misc/uWy-rO5sz_k) –

+0

Różnica, którą próbowałem uzyskać tutaj, nie wymaga wywoływania nowego katalogu w celu utworzenia nieistniejących katalogów. Po prostu wywołanie metody create na File z rekurencyjnym argumentem true robi to za Ciebie. W każdym razie, myślałem, że to wygląda trochę czystsze – willsquire

+0

Haha, poprawione! – willsquire

Powiązane problemy