18

特定のパスがディレクトリであることを示す関数を作成しようとしています。

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
fs.statSync(pathname, function(err, stats) {
    console.log(stats.isDirectory());
});
console.log("+++++++++++++++++++++++++++++++++++++++");

ただし、答えは出力されません。

パス名が存在する場合 - 関数は呼び出されません。存在しない場合は、例外が生成されます: ENOENT not a file or directory. パス名が存在するかどうかは知りたくありませんが、ディレクトリかどうかは知りたいです。

誰でも私がそれを修正するのを助けることができますか?

4

2 に答える 2

34

コールバックを使用しない同期バージョンを使用しています。代わりに単に結果を返します。したがって、非同期フォームを使用するか、fs.stat(path, callback)次のように同期フォームを使用します。

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
var stats = fs.statSync(pathname);
console.log(stats.isDirectory());
console.log("+++++++++++++++++++++++++++++++++++++++");
于 2011-12-20T21:19:03.893 に答える
9

fs.stat() はどのように機能しますか?

コールバック/非同期 fs 関数を使用する場合は、同期バージョンを使用せず、 fs.stat() を使用してください。

var fs = require('fs');
console.log("+++++++++++++++++++++++++++++++++++++++");
fs.stat(pathname, function(err, stats) {
    console.log(stats.isDirectory());
});
console.log("+++++++++++++++++++++++++++++++++++++++");

fs.stat()に関する詳細情報があります。メイン オブジェクトに関する多くの情報を取得できます。

fs.stat(path, function(err, stats) {
      console.log(stats)
}

出力:

{ dev: 2049,
  ino: 305352,
  mode: 16877,
  nlink: 12,
  uid: 1000,
  gid: 1000,
  rdev: 0,
  size: 4096,
  blksize: 4096,
  blocks: 8,
  atime: '2009-06-29T11:11:55Z',
  mtime: '2009-06-29T11:11:40Z',
  ctime: '2009-06-29T11:11:40Z' }

多くの要素は、私たちにとって役に立たないことがよくあります。しかし、この記事によると、これらすべての変数の意味は次のとおりです。

  • dev:ファイルを含むデバイスの ID
  • モード:ファイル保護
  • nlink:ファイルへのハードリンクの数
  • uid:ファイルの所有者のユーザー ID。
  • gid:ファイルの所有者のグループ ID。
  • rdev:ファイルが特殊ファイルの場合のデバイス ID。
  • blksize:ファイル システム I/O のブロック サイズ。
  • ino:ファイルの inode 番号。inode は、ファイルに関する情報を格納するファイル システムのデータ構造です。
  • size:ファイルの合計サイズ (バイト単位)。
  • blocks:ファイルに割り当てられたブロックの数。
  • atime:ファイルの最終アクセス時刻を表す日付オブジェクト。
  • mtime:ファイルの最終変更時刻を表す日付オブジェクト。
  • ctime:ファイルの inode が最後に変更された時刻を表す日付オブジェクト。

また、 nodeJS のドキュメントにあるように、次のような詳細情報を取得することもできます。

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isCharacterDevice()
stats.isFIFO()
stats.isSocket()

stats.isSymbolicLink() については、fs.lstat() と呼ばれる fs.stat 以外の関数があり、それらの違いは次のとおりです。

  • statシンボリックリンクに従います。シンボリックリンクであるパスを指定すると、シンボリックリンクのターゲットの統計を返します。
  • lstatシンボリックリンクをたどりません。シンボリックリンクであるパスを指定すると、ターゲットではなくシンボリックリンクの統計を返します。
于 2017-10-19T18:36:24.720 に答える