Node.jsでパスがフォルダを示しているかチェックする
2016/03/24
パスがフォルダを示しているかチェックするにはパスに対応するファイルやフォルダに関する情報を表すfs.Stats
クラスのインスタンスを取得する必要があります。
これには非同期的に取得する方法と同期的に取得する方法の2つがあります。
非同期的に取得するにはfs.stat
関数を使用します。
第1引数にパスを指定します。
第2引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトです。そして、第2引数がfs.Stats
クラスのインスタンスです。存在しないパスを指定した場合にはエラーが発生します。
同期的に取得するにはfs.statSync
関数を使用します。
第1引数にパスを指定します。
返り値としてfs.Stats
クラスのインスタンスが得られます。存在しないパスを指定した場合にはエラーが発生します。
fs.Stats
クラスのインスタンスを取得したら、このインスタンスのisDirectory
関数を呼び出します。
この関数は、このインスタンスがフォルダに関する情報を表している場合にtrue
を返します。
これにより、パスがフォルダを示しているかチェックすることができます。
なお、fs.Stats
クラスのインスタンスを取得しようとする場合、原則的にはfs.stat
関数を使用するべきであり、特に理由がないならfs.statSync
関数は使用するべきではありません。
これは、ファイルへのアクセスは非常に時間の掛かる処理であるためです。ファイルへのアクセスを同期的に行うと、アクセスが完了するまでプログラムは待機状態となり、他の処理を行うことができません。長い時間プログラムが待機状態になると、様々な問題を引き起こす可能性があります。
サンプルコード1
fs.stat
関数の使用例です。
コマンドライン引数として与えられたパスがフォルダを示しているか非同期的にチェックします。
▼fs-stat-directory.js
var fs = require('fs');
if (process.argv.length < 3) {
console.error('lack argument.');
process.exit(1);
}
fs.stat(process.argv[2], function (err, stats) {
if (err) {
console.error(err);
process.exit(1);
}
else if (stats.isDirectory()) {
console.log('path is folder.');
}
else {
console.log('path is not folder.')
}
});
▼実行結果
存在しないパスC:\works
を指定した場合にはエラーとなっていることが分かります。
C:\work\node>node fs-stat-directory.js C:\work\node
path is folder.
C:\work\node>node fs-stat-directory.js C:\work\node\fs-stat-directory.js
path is not folder.
C:\work\node>node fs-stat-directory.js C:\works
{ [Error: ENOENT: no such file or directory, stat 'C:\works']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'C:\\works' }
サンプルコード2
fs.statSync
関数の使用例です。
コマンドライン引数として与えられたパスがフォルダを示しているか同期的にチェックします。
▼fs-statsync-directory.js
var fs = require('fs');
if (process.argv.length < 3) {
console.error('lack argument.');
process.exit(1);
}
try {
var stats = fs.statSync(process.argv[2]);
if (stats.isDirectory()) {
console.log('path is folder.');
}
else {
console.log('path is not folder.')
}
}
catch (err) {
console.error(err);
process.exit(1);
}
▼実行結果
存在しないパスC:\works
を指定した場合にはエラーとなっていることが分かります。
C:\work\node>node fs-statsync-directory.js C:\work\node
path is folder.
C:\work\node>node fs-statsync-directory.js C:\work\node\fs-statsync-directory.js
path is not folder.
C:\work\node>node fs-statsync-directory.js C:\works
{ [Error: ENOENT: no such file or directory, stat 'C:\works']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'C:\\works' }
関連
