есть ли какой-нибудь способ, которым я могу получить статистику папки с узлом JS - PullRequest
0 голосов
/ 05 сентября 2018

Есть ли способ получить статистику папок с node js ?. Мне нужна функция в nodejs, чтобы я мог видеть статистику папки, а не состояние файла я пробовал эту функцию

fs.stat(path,(error,state)=>{
        console.log(state)
})

но похоже, что он работает только для файлов, а не папок я работаю на стороне сервера с node.js мой код на случай, если он вам нужен

let folders=fs.readdirSync(path.join(__dirname,'../movies/'));
folders.map((paths)=>{
    fs.stat(paths,(f,state)=>{
        console.log(f,state)
    })

})

файлы в приведенном выше коде имеют только папки состояние не определено и вот что я получаю ошибку

{ Error: ENOENT: no such file or directory, stat 'C:\Users\DELL N5559\Desktop\stock\Folder'
  errno: -4058,
  code: 'ENOENT',
  syscall: 'stat',
  path: 'C:\\Users\\DELL N5559\\Desktop\\stock\\Folder' }
    enter code here
    enter code here

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

При правильном использовании fs.stat() выдает эту информацию о папке, взятой непосредственно из console.log(stats) в этом коде (при запуске в Windows, но я считаю, что она должна работать и на других платформах):

const fs = require('fs');

fs.stat("html", function(err, stats) {
    if (err) {
        console.log(err);
    } else {
        console.log(stats);
    }
});

Результат в консоли:

Stats {
  dev: 2525584580,
  mode: 16822,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 281474976939511,
  size: 0,
  blocks: undefined,
  atimeMs: 1517560386009.7627,
  mtimeMs: 1517560386009.7627,
  ctimeMs: 1517560386009.7627,
  birthtimeMs: 1517560385994.137,
  atime: 2018-02-02T08:33:06.010Z,
  mtime: 2018-02-02T08:33:06.010Z,
  ctime: 2018-02-02T08:33:06.010Z,
  birthtime: 2018-02-02T08:33:05.994Z 
}

За документ , birthtime может быть или не быть датой создания (зависит от ОС). ctime не время создания (это время изменения файлового узла, то есть параметры узла, а не содержимое файла).

Из документа:

Время рождения «Время рождения» - время создания файла. Устанавливается один раз при создании файла. В файловых системах, где время рождения недоступно, это поле может содержать либо ctime, либо 1970-01-01T00: 00Z (т. Е. Отметка времени эпохи Unix 0). В этом случае это значение может быть больше, чем atime или mtime. В Darwin и других вариантах FreeBSD также устанавливается, если atime явно установлен на более раннее значение, чем текущее время рождения, с помощью системного вызова utimes (2).

Это похоже на способ сказать, что это просто большой беспорядок и зависит от платформы. Так что, если вы хотите использовать его для чего-то полезного, вам, вероятно, придется протестировать свою платформу, чтобы убедиться, что она действительно нужна.

Похожие обсуждения:

Получить дату создания файла в узле

По-прежнему нет интерфейса ядра Linux для получения даты создания файла?

Как получить дату создания файла с помощью модуля fs?


Кроме того, в вашем коде вы не передаете достаточно пути к вашей функции fs.stat(). fs.readdir() возвращает только имя файла / каталога (без указания пути), поэтому при попытке сделать это:

folders.map((paths)=>{...}

Переменная paths - это просто одно имя файла, которого нет в текущем каталоге. Чтобы все заработало, вы должны вернуть путь обратно, прежде чем вызывать fs.stat().

let root = path.join(__dirname,'../movies/');
let folders = fs.readdirSync(root);
folders.map(name => {
    let fullname = path.join(root, name);
    fs.stat(fullname,(err, state) => {
        console.log(err, state)
    });
});
0 голосов
/ 05 сентября 2018

Обратный вызов в fs.stat должен иметь форму (err, stats) => {}. Вы распечатываете ошибку - поэтому, если ошибки нет, вы не получите никакого вывода.

Как примечание, fs.stat будет работать как для файлов, так и для каталогов, так как они более или менее имеют одинаковую структуру данных в базовой среде выполнения Node.js.

...