情報アイランド

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

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' }

関連

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

-Node.js