要件
electron アプリで、ダウンロードしたファイルをユーザが指定したディレクトリに保存したい。そのとき、ユーザが指定したディレクトリが存在するのか、そのディレクトリに対するアクセス権限があるのかを確認したい。
やること
- ユーザが指定したディレクトリが存在しているかどうか確認する
- ユーザが指定したディレクトリへのアクセス権限があるかどうかを調べる
fs.exists でディレクトリが存在しているかどうかを確認する
fs.existsSync を使用して下記のように書いていたけれど、exists は非推奨らしい。
if (fs.existsSync(path)) {
// ok
}
fs.access でディレクトリが存在しているかどうか、アクセス権限があるかどうかを同時に調べる
fs.accessSync というメソッドを使用する
なんかディレクトリが存在しない場合と、アクセス権限がない場合を try {} catch() {}
で書かないといけないのがすごい違和感ある。
できれば boolean で返してほしい。
try {
fs.accessSync(path);
// ok
return true;
} catch (error) {
// ng
return false;
}
accessSync の第2引数で、アクセス権限を指定できる。
- fs.constants.F_OK - 読み取り、書き込み、実行権限がある
- fs.constants.R_OK - 読み取り権限がある
- fs.constants.W_OK - 書き込み権限がある
- fs.constants.X_OK - 実行権限がある
- 第2引数に何も指定されていない場合は fs.constants.F_OK (読み取り、書き込み、実行権限がある) と同値。
try {
// ディレクトリ/ファイルが存在しているかつ、書き込み権限があるかどうか
fs.accessSync(path, s.constants.R_OK);
// ok
return true;
} catch (error) {
// ng
return false;
}
まとめ
💪