情報アイランド

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

Node.jsでフォルダを削除する

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

非同期的な削除

フォルダを非同期的に削除するにはfs.rmdir関数を使用します。

var fs = require('fs');

fs.rmdir('xxx', function (err) {
});

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

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

同期的な削除

フォルダを同期的に削除するにはfs.rmdirSync関数を使用します。

fs.rmdirSync('xxx');

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

使い分け

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

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

注意事項

fs.rmdir関数やfs.rmdirSync関数はフォルダを再帰的に削除することはできません。

フォルダを再帰的に削除するには下のような関数を使用します。

  • rimrafモジュールのrimraf関数
  • fs-extraモジュールのfsExtra.remove関数
  • rimrafモジュールのrimraf.sync関数
  • fs-extraモジュールのfsExtra.removeSync関数

これらの関数に関しては下の記事を参照してください。

サンプルコード1

fs.rmdir関数の使用例です。

3つ目のコマンドライン引数として与えられたフォルダを非同期的に削除します。

fs-rmdir.js

var fs = require('fs');

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

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

実行結果

現在のフォルダにはtmpという名称のフォルダが存在しています。

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

 Directory of C:\work\node\tmp

2016/10/19  10:22    <DIR>          .
2016/10/19  10:22    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  30,128,828,416 bytes free

tmpを3つ目のコマンドライン引数に指定してコードを実行するとフォルダが削除されます。

C:\work\node>node fs-rmdir.js tmp
finished!!

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

 Directory of C:\work\node

File Not Found

存在しないフォルダを指定した場合にはエラーが発生します。

C:\work\node>node fs-rmdir.js tmp
{ Error: ENOENT: no such file or directory, rmdir 'C:\work\node\tmp'
    at Error (native)
  errno: -4058,
  code: 'ENOENT',
  syscall: 'rmdir',
  path: 'C:\\work\\node\\tmp' }

ファイルを指定した場合にもエラーが発生します。

C:\work\node>node fs-rmdir.js fs-rmdir.js
{ Error: ENOENT: no such file or directory, rmdir 'C:\work\node\fs-rmdir.js'
    at Error (native)
  errno: -4058,
  code: 'ENOENT',
  syscall: 'rmdir',
  path: 'C:\\work\\node\\fs-rmdir.js' }

また、フォルダを再帰的に削除することはできません。

C:\work\node>mkdir tmp\tmp2\tmp3

C:\work\node>node fs-rmdir.js tmp
{ Error: ENOTEMPTY: directory not empty, rmdir 'C:\work\node\tmp'
    at Error (native)
  errno: -4051,
  code: 'ENOTEMPTY',
  syscall: 'rmdir',
  path: 'C:\\work\\node\\tmp' }

関連

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

-Node.js