Jaz
Jaz

Reputation: 135

How to check if path is a directory or file?

I want to check if the path is a file or a directory. If it's a directory then Log the directory and file separately. Later I want to send them as json object.

const testFolder = './data/';
fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    console.log(`FILES: ${file}`);
  })});

Edit: If I try to this

fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    if (fs.statSync(file).isDirectory()) {
    console.log(`DIR: ${file}`);
  } else {
    console.log(`FILE: ${file}`)
  }
  })}); 

I get this error:

nodejs binding.lstat(pathModule._makeLong(path))

Update: Found the solution. I had to add testFolder + file like this :

if (fs.statSync(testFolder + file).isDirectory()) {

Upvotes: 0

Views: 9012

Answers (2)

Zdenek F
Zdenek F

Reputation: 1899

Since Node 10.10+, fs.readdir has withFileTypes option which makes it return directory entry fs.Dirent instead of just the filename. Directory entry contains useful methods such as isDirectory or isFile.

Your example then would be solved by:

const testFolder = './data/';
fs.readdir(testFolder, { withFileTypes: true }, (err, dirEntries) => {
  dirEntries.forEach((dirEntry) => {
    const { name } = dirEntry;
    if (dirEntry.isDirectory()) {
      console.log(`DIR: ${name}`);
    } else {
      console.log(`FILE: ${name}`);
    }
  })})

Upvotes: 2

Me1o
Me1o

Reputation: 1629

quick google search..

var fs = require('fs');
var stats = fs.statSync("c:\\dog.jpg");
console.log('is file ? ' + stats.isFile());

read: http://www.technicalkeeda.com/nodejs-tutorials/how-to-check-if-path-is-file-or-directory-using-nodejs

Upvotes: 4

Related Questions