情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでフォルダの中身を空にする

フォルダの中身を空にするには非同期的に空にする方法と同期的に空にする方法の2つがあります。

非同期的な空

フォルダの中身を非同期的に空にするにはfs-extraモジュールのfsExtra.emptyDir関数を使用します。

var fsExtra = require('fs-extra');

fsExtra.emptyDir('xxx', function (err) {
});

第1引数にフォルダのパスを指定します。

第2引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトです。

同期的な空

フォルダの中身を同期的に空にするにはfs-extraモジュールのfsExtra.emptyDirSync関数を使用します。

fsExtra.emptyDirSync('xxx');

第1引数にフォルダのパスを指定します。

使い分け

原則的にはfsExtra.emptyDir関数を使用するべきであり、特に理由がないならfsExtra.emptyDirSync関数は使用するべきではありません。

これは、フォルダへのアクセスは非常に時間の掛かる処理であるためです。フォルダへのアクセスを同期的に行うとアクセスが完了するまでプログラムは待機状態となり、他の処理を行うことができません。長い時間プログラムが待機状態になると様々な問題を引き起こす可能性があります(このような現象をスターベーションと言います)。

サンプルコード1

fsExtra.emptyDir関数の使用例です。

3つ目のコマンドライン引数として与えられたフォルダの中身を空にします。

fs-extra-empty-dir.js

var fsExtra = require('fs-extra');

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

fsExtra.emptyDir(process.argv[2], function (err) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        console.log('finished!!');
    }
});

使用パッケージ

  • fs-extra
    npm install fs-extraでインストールします。

実行結果

現在のフォルダにはfolderという名称のフォルダが存在しており、textfile.txtという名称のファイルとfolder2という名称のフォルダを含んでいます。

C:\work\node>dir folder
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\node\folder

2016/11/18  16:41    <DIR>          .
2016/11/18  16:41    <DIR>          ..
2016/11/18  16:41    <DIR>          folder2
2016/11/18  16:41                 4 textfile.txt
               1 File(s)              4 bytes
               3 Dir(s)  26,525,597,696 bytes free

folderを3つ目のコマンドライン引数に指定してコードを実行すると正しくフォルダの中身が空にされます。

C:\work\node>node fs-extra-empty-dir.js folder
finished!!

C:\work\node>dir folder
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\node\folder

2016/11/18  16:43    <DIR>          .
2016/11/18  16:43    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  26,525,601,792 bytes free

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js