ファイルの削除
原則として使用中のファイルは削除すべきではない。
ファイルが確実に解放されている時にファイルを削除しようとするならば、使用しているプロセスが居ないことを確認する必要がある。
ディレクトリからは削除されるがファイルエントリ自体は完全には削除されないという状態を利用していることはある。
シェルスクリプト
rm コマンドを使う。
code:remove_file.sh
JavaScript(Node.js)
fs パッケージの unlink, unlinkSync を使用する。
rm 系は v.14.14.0 から
code:remove_file.js
const fs = require("fs");
fs.unlinkSync("/tmp/target.file.path");
ファイルがない場合には例外になる。
code:unlinkSync.enoent.console
Error: ENOENT: no such file or directory, unlink 'hello'
at Object.unlinkSync (fs.js:1210:3)
at Object.<anonymous> (/workspace/nodejs-playground/playground/node_modules/fs-unlinksync-exp/index.js:11:4)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint as runMain (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47 {
errno: -2,
syscall: 'unlink',
code: 'ENOENT',
path: 'hello'
}
権限がない場合には例外になる。
code:unlinkSync.eaccess.console
Error: EACCES: permission denied, unlink 'foo/bar'
at Object.unlinkSync (fs.js:1210:3)
at Object.<anonymous> (/workspace/nodejs-playground/playground/node_modules/fs-unlinksync-exp/index.js:11:4)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint as runMain (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47 {
errno: -13,
syscall: 'unlink',
code: 'EACCES',
path: 'foo/bar'
}
C言語
POSIX
C標準ライブラリ, POSIX
ディレクトリならディレクトリを削除する。
実際の実装では unlink と rmdir を呼んでいる。
再起動時あるいはシャットダウン時に削除する場合
ごみ箱にファイルを入れる場合