ファイルやフォルダに関する情報を取得する
ファイルやフォルダに関する情報を取得するには非同期的に取得する方法と同期的に取得する方法の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 }
関連
