Node.jsでファイルを削除する
ファイルを削除するには非同期的に削除する方法と同期的に削除する方法の2つがあります。
非同期的な削除
ファイルを非同期的に削除するにはfs.unlink
関数を使用します。
var fs = require('fs');
fs.unlink('xxx', function (err) {
});
第1引数にファイルのパスを指定します。
第2引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトです。
同期的な削除
ファイルを同期的に削除するにはfs.unlinkSync
関数を使用します。
fs.unlinkSync('xxx');
第1引数にファイルのパスを指定します。
使い分け
原則的にはfs.unlink
関数を使用するべきであり、特に理由がないならfs.unlinkSync
関数は使用するべきではありません。
これは、ファイルへのアクセスは非常に時間の掛かる処理であるためです。ファイルへのアクセスを同期的に行うとアクセスが完了するまでプログラムは待機状態となり、他の処理を行うことができません。長い時間プログラムが待機状態になると様々な問題を引き起こす可能性があります(このような現象をスターベーションと言います)。
スターベーションとは?
サンプルコード1
fs.unlink
関数の使用例です。
3つ目のコマンドライン引数として与えられたファイルを非同期的に削除します。
fs-unlink.js
var fs = require('fs');
if (process.argv.length < 3) {
console.error('lack argument.');
process.exit(1);
}
fs.unlink(process.argv[2], function (err) {
if (err) {
console.error(err);
process.exit(1);
}
else {
console.log('finished!!');
}
});
実行結果
現在のフォルダにはtextfile.txt
という名称のファイルが存在しています。
C:\work\node>type textfile.txt
これはテキストファイルの内容です。
このファイルを3つ目のコマンドライン引数に指定してコードを実行するとファイルが削除されます。
C:\work\node>node fs-unlink.js textfile.txt
finished!!
C:\work\node>type textfile.txt
The system cannot find the file specified.
存在しないファイルやフォルダを指定した場合にはエラーが発生します。
C:\work\node>type textfile2.txt
The system cannot find the file specified.
C:\work\node>node fs-unlink.js textfile2.txt
{ Error: ENOENT: no such file or directory, unlink 'C:\work\node\textfile2.txt'
at Error (native)
errno: -4058,
code: 'ENOENT',
syscall: 'unlink',
path: 'C:\\work\\node\\textfile2.txt' }
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-unlink.js dir
{ Error: ENOENT: no such file or directory, unlink 'C:\work\node\dir'
at Error (native)
errno: -4058,
code: 'ENOENT',
syscall: 'unlink',
path: 'C:\\work\\node\\dir' }
関連
