How to create full path with node's fs.mkdirSync?

后端 未结 22 1930
故里飘歌
故里飘歌 2020-11-29 18:03

I\'m trying to create a full path if it doesn\'t exist.

The code looks like this:

var fs = require(\'fs\');
if (!fs.existsSync(newDest)) fs.mkdirSync         


        
22条回答
  •  猫巷女王i
    2020-11-29 18:31

    I had issues with the recursive option of fs.mkdir so I made a function that does the following:

    1. Creates a list of all directories, starting with the final target dir and working up to the root parent.
    2. Creates a new list of needed directories for the mkdir function to work
    3. Makes each directory needed, including the final

      function createDirectoryIfNotExistsRecursive(dirname) {
          return new Promise((resolve, reject) => {
             const fs = require('fs');
      
             var slash = '/';
      
             // backward slashes for windows
             if(require('os').platform() === 'win32') {
                slash = '\\';
             }
             // initialize directories with final directory
             var directories_backwards = [dirname];
             var minimize_dir = dirname;
             while (minimize_dir = minimize_dir.substring(0, minimize_dir.lastIndexOf(slash))) {
                directories_backwards.push(minimize_dir);
             }
      
             var directories_needed = [];
      
             //stop on first directory found
             for(const d in directories_backwards) {
                if(!(fs.existsSync(directories_backwards[d]))) {
                   directories_needed.push(directories_backwards[d]);
                } else {
                   break;
                }
             }
      
             //no directories missing
             if(!directories_needed.length) {
                return resolve();
             }
      
             // make all directories in ascending order
             var directories_forwards = directories_needed.reverse();
      
             for(const d in directories_forwards) {
                fs.mkdirSync(directories_forwards[d]);
             }
      
             return resolve();
          });
       }
      

提交回复
热议问题