vlad-74
12/24/2019 - 9:58 AM

JS РАБОТА С ФАЙЛАМИ

JS РАБОТА С ФАЙЛАМИ

function fileTostring(fl){
    return new Promise(function(resolve, reject) {
        fs.readFile(fl, function(err, data) {
          if (err) {
            if (err.code == 'ENOENT') {
                reject('ПУТЬ УКАЗАН НЕ ПРАИВЛЬНО - ' + err.message);
            } else {
                reject('НЕПОНЯТНАЯ ОШИБКА - ' + err);
            }
          } else {
            resolve(data.toString());
          }
        });  
    })
}
exports.fileTostring = fileTostring;

let allFiles = function(dir){
    let r = fs.readdirSync(dir).filter(f => fs.statSync(path.join(dir, f)).isFile());
    return r;
};
exports.allFiles = allFiles;

let allDir = function(dir){
    let d = fs.readdirSync(dir).filter(f => fs.statSync(path.join(dir, f)).isDirectory());
    return d;
};
exports.allDir = allDir;

function cmdConsLog(dr,fl){
    let allfiles = allFiles(dr);
    let allfolders = allDir(dr);

    console.log('\n' + gl_hr, '\nВСЕ папки раздела : ', allfolders, '\nВСЕ файлы раздела : ', allfiles, '\n' + gl_hr);

    fileTostring(fl)
      .then(function res(result) {console.log(result + '\n' + gl_hr);})
      .catch(function err(result) {console.log('ОШИБОЧКА ВЫШЛА = ', result + '\n' + gl_hr);});
    console.log(gl_hr); 
}
exports.cmdConsLog = cmdConsLog;

let allFilesFromFolder = function(dir, filelist = []) {
    var path = path || require('path'),
    fs = fs || require('fs'),
    files = fs.readdirSync(dir),
    filelist = filelist || [];
    // path = gl_RootPath + path;

    files.forEach(function(file) {
        if (fs.statSync(path.join(dir, file)).isDirectory()) {
            filelist = allFilesFromFolder(path.join(dir, file), filelist);
        }
        else {
            filelist.push(path.join(dir, file));
        }
    });
    return filelist;
};
exports.allFilesFromFolder = allFilesFromFolder;
//ПРИМЕР ИСПОЛЬЗОВАНИЯ: let tt = allFilesFromFolder(__dirname);
//let tt = allFilesFromFolder('../../helper/');
//ИЛИ
// let tt = allFilesFromFolder('D:/_DEVELOPER/Sites/_GIT/05-live-reload/helper/');
// console.log('\nВСЕ ФАЙЛЫ В ТЕКУЩЕЙ ПАПКЕ (смотри путь в командной сроке ПЛЮС путь в переменной) :\n', tt);

let choiceAllFilesFromFolder = function(dir, choice = 'default', filelist = []) {
    var path = path || require('path'),
    fs = fs || require('fs'),
    files = fs.readdirSync(dir),
    filelist = filelist || [],
    choice = choice || 'default';

    files.forEach(function(file) {
        if (fs.statSync(path.join(dir, file)).isDirectory()) {
            filelist = choiceAllFilesFromFolder(path.join(dir, file), choice, filelist);
        }
        else {
            if(choice == 'default'){filelist.push(path.join(dir, file))};
            if(choice == 'path'){filelist.push(dir +'|' + file)};
            if(choice == 'folder'){filelist.push(path.basename(dir))};
            if(choice == 'file'){filelist.push(path.basename(file))};
            if(choice == 'ext'){filelist.push(path.extname(file))};

        }
    });
    return filelist;
};
exports.choiceAllFilesFromFolder = choiceAllFilesFromFolder;
//ПРИМЕР ИСПОЛЬЗОВАНИЯ: let tt = choiceAllFilesFromFolder(__dirname);
//let tt = choiceAllFilesFromFolder('../../helper/');
//ИЛИ
// let tt = choiceAllFilesFromFolder('D:/_DEVELOPER/Sites/_GIT/05-live-reload/helper/');
// console.log('\nВСЕ ФАЙЛЫ В ТЕКУЩЕЙ ПАПКЕ (смотри путь в командной сроке ПЛЮС путь в переменной) :\n', tt);

exports.createOrClearAndWrite = function(path, content){
    fs.writeFile(path, content, function(err) {
        if(err) throw err;
    });
};

exports.appendToFile = function(path, content){
    fs.appendFile(path, content, function (err) {
      if (err) throw err; 
    });
};

let copyFile = function(from, to){
    fs.createReadStream(from).pipe(fs.createWriteStream(to));
};
exports.copyFile = copyFile;

exports.deleteFile = function(filePath){
    fs.unlinkSync(filePath);
};

exports.rimraf = function(dir_path) {
    // dir_path = gl_RootPath + dir_path;
    if (fs.existsSync(dir_path)) {
        fs.readdirSync(dir_path).forEach(function(entry) {
            var entry_path = path.join(dir_path, entry);
            if (fs.lstatSync(entry_path).isDirectory()) {
                rimraf(entry_path);
            } else {
                fs.unlinkSync(entry_path);
            }
        });
        fs.rmdirSync(dir_path);
    }
};

exports.SynchronousMkdir = function(args){
  try {
    fs.mkdirSync(arg);
  } 
  catch(err) {
    console.log(err);
  }
};

exports.AsynchronousMkdir = function(path){
  fs.mkdir(path, function(err) {if(err) console.log(err)});
};

exports.SynchronousRmdir = function(path){
  try {
    fs.rmdirSync(path);
  } 
  catch(err) {console.log(err);}
};

exports.AsynchronousRmdir = function(path ){
    fs.rmdir(path , function(err) {if(err) console.log(err)});
}

let deleteFilePromise = function(dir, file) {
    return new Promise(function (resolve, reject) {
        var filePath = path.join(dir, file);
        fs.lstat(filePath, function (err, stats) {
            if (err) {
                return reject(err);
            }
            if (stats.isDirectory()) {
                resolve(deleteDirectoryPromise(filePath));
            } else {
                fs.unlink(filePath, function (err) {
                    if (err) {
                        return reject(err);
                    }
                    resolve();
                });
            }
        });
    });
};
exports.deleteFilePromise = deleteFilePromise;

let deleteDirectoryPromise = function(dir) {
    return new Promise(function (resolve, reject) {
        fs.access(dir, function (err) {
            if (err) {
                return reject(err);
            }
            fs.readdir(dir, function (err, files) {
                if (err) {
                    return reject(err);
                }
                Promise.all(files.map(function (file) {
                    return deleteFilePromise(dir, file);
                })).then(function () {
                    fs.rmdir(dir, function (err) {
                        if (err) {
                            return reject(err);
                        }
                        resolve();
                    });
                }).catch(reject);
            });
        });
    });
};
exports.deleteDirectoryPromise = deleteDirectoryPromise
let readFileSync = function(path){ 
    var contents = fs.readFileSync(path, 'utf8');
    return contents;
};
exports.readFileSync = readFileSync;

exports.readFileAsync = function(path){ 
    fs.readFile(path, function read(err, data) {
        var content = '';
        if (err) {throw err;} content = data.toString('utf8');
        console.log(content);
    });
};

exports.readFileLineByLine = function(filename, processline) {
    var stream = fs.createReadStream(filename);
    var s = "";
    stream.on("data", function(data) {
        s += data.toString('utf8');
        var lines = s.split("\n");
        for (var i = 0; i < lines.length - 1; i++)
            processline(lines[i]);
        s = lines[lines.length - 1];
    });

    stream.on("end",function() {
        var lines = s.split("\n");
        for (var i = 0; i < lines.length; i++)
            processline(lines[i]);
    });
};