Nodo.js comprobar si la ruta es archivo o directorio


Parece que no puedo obtener ningún resultado de búsqueda que explique cómo hacer esto.

Todo lo que quiero hacer es ser capaz de saber si una ruta dada es un archivo o un directorio (carpeta).

Author: Tshepang, 2013-03-26

2 answers

fs.lstatSync(path_string).isDirectory() debería decírtelo. De los documentos :

Objetos devueltos desde fs.stat () y fs.lstat() son de este tipo.

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()
 428
Author: Jason Sperske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-11 13:40:12

Actualizar: Nodo.Js > = 10

Podemos usar el nuevo fs.promises API

Experimental Esta característica está todavía en desarrollo activo y sujeto a cambios no compatibles con versiones anteriores, o incluso eliminación, en cualquier versión futura. No se recomienda el uso de la función en producción ambiente. Las características experimentales no están sujetas al nodo.js Modelo de Versionado semántico.

const fs = require('fs').promises;

(async() => {

        try {
            const stat = await fs.lstat('test.txt');
            console.log(stat.isFile());
        } catch(err) {
            console.error(err);
        }
})();

Cualquier Nodo.Js version

Así es como detectarías si una ruta es un archivo o un directorio asincrónicamente, que es el enfoque recomendado en node. usando fs.lstat

const fs = require("fs");

let path = "/path/to/something";

fs.lstat(path, (err, stats) => {

    if(err)
        return console.log(err); //Handle error

    console.log(`Is file: ${stats.isFile()}`);
    console.log(`Is directory: ${stats.isDirectory()}`);
    console.log(`Is symbolic link: ${stats.isSymbolicLink()}`);
    console.log(`Is FIFO: ${stats.isFIFO()}`);
    console.log(`Is socket: ${stats.isSocket()}`);
    console.log(`Is character device: ${stats.isCharacterDevice()}`);
    console.log(`Is block device: ${stats.isBlockDevice()}`);
});

Nota al usar la API síncrona:

Cuando se usa la forma síncrona, cualquier excepción se lanza inmediatamente. Puede usar try / catch para manejar excepciones o permitir que se formen burbujas.

try{
     fs.lstatSync("/some/path").isDirectory()
}catch(e){
   // Handle error
   if(e.code == 'ENOENT'){
     //no such file or directory
     //do something
   }else {
     //do something else
   }
}
 30
Author: Marcos Casagrande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-11 02:34:34