情報アイランド

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

ファイルやフォルダに関する情報を取得する

ファイルやフォルダに関する情報を取得するには非同期的に取得する方法と同期的に取得する方法の2つがあります。

非同期的な取得

ファイルやフォルダに関する情報を非同期的に取得するにはfs.stat関数を使用します。

var fs = require('fs');

fs.stat('xxx', function (err, stats) {
});

第1引数にファイルやフォルダのパスを指定します。

第2引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトであり、第2引数はファイルやフォルダに関する情報を表すfs.Statsクラスのインスタンスです。

このインスタンスは主に下のようなプロパティを有します。

  • size・・・バイト単位のサイズです。
  • birthtime・・・作成日時です。
  • mtime・・・更新日時です。
  • atime・・・アクセス日時です。

同期的な取得

ファイルやフォルダに関する情報を同期的に取得するするにはfs.statSync関数を使用します。

var stats = fs.statSync('xxx');

第1引数にファイルやフォルダのパスを指定します。

返り値としてfs.Statsクラスのインスタンスが得られます。

使い分け

原則的にはfs.stat関数を使用するべきであり、特に理由がないならfs.statSync関数は使用するべきではありません。

これは、ファイルやフォルダへのアクセスは非常に時間の掛かる処理であるためです。ファイルやフォルダへのアクセスを同期的に行うとアクセスが完了するまでプログラムは待機状態となり、他の処理を行うことができません。長い時間プログラムが待機状態になると様々な問題を引き起こす可能性があります(このような現象をスターベーションと言います)。

サンプルコード1

fs.stat関数の使用例です。

3つ目のコマンドライン引数として与えられたファイルやフォルダに関する情報を取得し、標準出力に出力します。

fs-stat.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 {
        console.log(stats);
    }
});

実行結果

現在のフォルダにはtextfile.txtという名称のファイルが存在しています。

C:\work\node>type textfile.txt
test

textfile.txtを3つ目のコマンドライン引数に指定してコードを実行するとファイルに関する情報が取得され、標準出力に出力されます。

C:\work\node>node fs-stat.js textfile.txt
{ dev: 482163784,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 46443371157271690,
  size: 4,
  blocks: undefined,
  atime: 1999-12-31T15:00:00.000Z,
  mtime: 2000-12-31T15:00:00.000Z,
  ctime: 2016-10-24T00:21:55.544Z,
  birthtime: 2016-10-24T00:15:37.042Z }

.を3つ目のコマンドライン引数に指定してコードを実行すると現在のフォルダに関する情報が取得され、標準出力に出力されます。

C:\work\node>node fs-stat.js .
{ dev: 482163784,
  mode: 16822,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 2533274790708379,
  size: 0,
  blocks: undefined,
  atime: 2016-10-27T10:44:20.343Z,
  mtime: 2016-10-27T10:44:20.343Z,
  ctime: 2016-10-27T10:44:20.343Z,
  birthtime: 2016-01-19T16:43:36.127Z }

関連

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

-Node.js