Dart ディレクトリ名変更について調査したのでメモ書き。
先ずは「dart:io」パッケージをimport。
import 'dart:io';
Dartにはディレクトリ名を変更するメソッドが2つ用意されている。
非同期で処理を行うrename()と、同期で処理を行うrenameSync()。
Directoryクラスでは非同期処理を推奨しているので、rename()を試してみる。
リネーム用のディレクトリを作成。配下にサブディレクトリも作成する。
% mkdir -p dir/subdir
% ls -d dir/subdir
dir/subdir/
rename()メソッドお試し用にコーディングする。
import 'dart:io';
void main() async {
try {
// ディレクトリのリネーム
await Directory('dir').rename('rendir');
} catch (e, st) {
// 例外処理
print('Error:$e\nStackTrace:$st');
}
}
処理を実行。「dir」ディレクトリが「rendir」にリネームされる。
% dart run bin/dir1.dart
% ls -d rendir
rendir/
既にリネーム先のディレクトリがある状態で再度実行する。
以下エラーが出力された。
% dart run bin/dir1.dart
Error:FileSystemException: Rename failed, path = 'dir' (OS Error: Directory not empty, errno = 66)
StackTrace:#0 _checkForErrorResponse (dart:io/common.dart:42:9)
#1 _Directory.rename.<anonymous closure> (dart:io/directory_impl.dart:200:7)
<asynchronous suspension>
#2 main (file:///Users/watana
今度はrendirディレクトリ配下のサブディレクトリを削除して行う。
% rm -fr subdir
% cd ..
% dart run bin/dir1.dart
% ls rendir
subdir/
リネーム先のディレクトリが存在し空ではない場合、rename()メソッドは失敗する。
リネーム先のディレクトリが存在し空の場合は、そのディレクトリを削除してからディレクトリをリネームする、というのがrename()メソッドの動作となる。
コメント