Dartのディレクトリ削除について調査したのでメモ書き。
先ずは「dart:io」パッケージをimport。
import 'dart:io';Directoryクラスにはディレクトリを削除するメソッドが2つ用意されている。
一つは非同期で削除するdelete()。もう一つは同期で削除するdeleteSync()。
Directoryクラスはブロッキングしない非同期を推奨しているので、delete()を試す。
削除用のディレクトリを作成。
% mkdir -p dir/subdir
% ls -d dir/subdir
dir/subdir/削除処理をコーディング。
exists()でディレクトリの存在確認後に削除する。ちなみにexistsSync()も存在する。
delete()には配下のディレクトリ・ファイルを再帰的に削除するための引数「recursive: true」がある。デフォルトはfalse。
今回はサブディレクトリが存在するので、このまま実行するとエラーが発生する。
バッチ処理でありがちなエラーなので、確認しておく。
import 'dart:io';
void main() async {
try {
// ディレクトリの存在確認
if (await Directory('dir').exists()) {
// ディレクトリを削除
await Directory('dir').delete();
}
} catch (e, st) {
// 例外処理
print('Error:$e\nStackTrace:$st');
}
}実行結果。
例外が発生する。
% dart run bin/dir1.dart
Error:FileSystemException: Deletion failed, path = 'dir' (OS Error: Directory not empty, errno: 66)
StackTrace:#0 _checkForErrorResponse (dart:io/common.dart:42:9)
#1 _Directory._delete.<anonymous closure> (dart:io/directory_impl.dart:185:7)
<asynchronous suspension>
📁 Dart Directoryクラスの全体像・主要操作
Directoryクラスのフォルダ作成・操作一覧は、以下の解説マップをご覧ください。
➔ Dart Directoryクラスの使い方:フォルダの作成・操作解説マップ

コメント