fs.readdir ignore directories

后端 未结 2 1055
温柔的废话
温柔的废话 2021-02-08 00:20

I would like to scan the folder, but ignore all the folders/directories that are included in it. All I have in the (C:/folder/) are .txt files and other folders, I just want to

相关标签:
2条回答
  • 2021-02-08 00:28

    Use fs.readdir or fs.readdirSync method with options { withFileTypes: true } and then do filtration using dirent.isFile (requires Node 10.10+).

    Sync version

    const fs = require('fs');
    const dirents = fs.readdirSync(DIRECTORY_PATH, { withFileTypes: true });
    const filesNames = dirents
        .filter(dirent => dirent.isFile())
        .map(dirent => dirent.name);
    // use filesNames
    

    Async version (with async/await, requires Node 11+)

    import { promises as fs } from 'fs';
    
    async function listFiles(directory) {
        const dirents = await fs.readdir(directory, { withFileTypes: true });
        return dirents
            .filter(dirent => dirent.isFile())
            .map(dirent => dirent.name);
    }
    

    Async version (with callbacks)

    const fs = require('fs');
    fs.readdir(DIRECTORY_PATH, { withFileTypes: true }, (err, dirents) => {
        const filesNames = dirents
            .filter(dirent => dirent.isFile())
            .map(dirent => dirent.name);
        // use filesNames
    });
    
    0 讨论(0)
  • 2021-02-08 00:31

    Please See diraria's answer as it is more complete: my answer only works if ALL filenames contain a '.txt' extension.

    why not just filter out files that end in ".txt"?

    var fs = require("fs")
    fs.readdirSync("./").filter(function(file) {
        if(file.indexOf(".txt")>-1)console.log(file)
    })
    

    I should have added previously that to get an array of these files you need to return them to an array as shown below.

    var fs = require("fs")
    let text_file_array = fs.readdirSync("./").filter(function(file) {
        if(file.indexOf(".txt")>-1) return file;
    })
    
    0 讨论(0)
提交回复
热议问题