Dart ディレクトリ名変更

Dar言語StreamクラスtoSet()メソッドDart

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()メソッドの動作となる。

コメント

タイトルとURLをコピーしました