-
Creare director nou
-
Redenumire director
-
Stergere director
-
Modulul fs-extra
Citire continut director
Metoda
fs.readdirSync(dir) poate fi folosita pentru a citi continutul unui director. Returneaza un array cu numele de fisiere si directoare din directorul specificat ("dir"), excluzand '.' si '..'.
Exemplu: functia dirCnt() din urmatorul cod returneaza un obiect cu directoarele si fisierele din directorul in care ruleaza acest cod:
//returns object with folders and files in $dir {root:'dir_path', d:[], f:[]}
var dirCnt = (dir)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
var re ={root:path.resolve(dir), d:[], f:[]};
//traverses the list with folders and files, and add them in $re
fs.readdirSync(dir).forEach((f)=>{
var df = path.resolve(dir, f); //set the path of the file/folder
//check if $df is file or directory
var stats = fs.statSync(df);
if(stats.isFile()) re.f.push(f);
else if(stats.isDirectory()) re.d.push(f);
});
return re;
};
//get the folder and files of the directory where this file is located
var df = dirCnt(__dirname);
console.log(df);
Salveaza codul de mai sus intr-un fisier numit "read_dir.js" si ruleaza fisierul in interfata command line.
Vei obtine un resultat ca in acest screenshoot:
Creare director nou
Pentru a crea un director nou, poti folosi metoda
fs.mkdir() sau metoda
fs.mkdirSync()
Aici este un exemplu cu o functie care poate fi folosita pentru a crea un nou director:
//creates in $base the directory $dirname; Returns string message
var createDir = (base, dirname)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
var dir = path.resolve(base, dirname);
var re ='The directory: '+ dir +'/ already exists';
if(!fs.existsSync(dir)){
fs.mkdirSync(dir, 0755);
re = fs.existsSync(dir) ?'Successfully created: '+ dir :'Unable to create: '+ dir;
}
return re;
};
//creates a folder called 'newdir' in the directory where this file is located
var mkdir = createDir(__dirname, 'newdir');
console.log(mkdir);
Redenumire director
Pentru a redenumi un director cu modulul File system, se foloseste metoda
fs.rename(oldPath, newPath, callback)
Exemplu: Redenumeste directorul "dir_1" (localizat in "/test") in "renamed_dir":
const fs = require('fs');
var old_d ='./test/dir_1';
var new_d ='./test/renamed_dir';
fs.rename(old_d, new_d, (err)=>{
if(err) throw err;
console.log('Renamed.');
});
Stergere director
Pentru a sterge un director poti folosi functia
removeDir() din acest cod:
/*
Remove a Directory Asynchronously
- dir = path to directory to delete
- recursive = true or false;
True - will remove recursively the entire directory;
False - delete only the files in specified directory
- callback = (optional) callback function; receives an argument for returned response
*/
function removeDir(dir, recursive, callback){
const fs = require('fs');
const path = require('path');
var nr =0; //to call the callback only once
function delFile(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(recursive===true && stats.isDirectory()) resolve(delDir(filePath));
else if(stats.isFile()){
fs.unlink(filePath, function(err){
if(err) return reject(err);
resolve();
});
}
nr++;
if(recursive===false && nr==1) return callback ? callback('Files deleted') :resolve();
});
});
};
function delDir(dir){
return new Promise(function(resolve, reject){
fs.access(dir, function(err){
if(err) return callback ? callback(err) :reject(err);
fs.readdir(dir, function(err, files){
if(err) return callback ? callback(err) :reject(err);
Promise.all(files.map(function(file){
return delFile(dir, file);
})).then(function(){
if(recursive===true){
fs.rmdir(dir, function(err){
if(err) return callback ? callback(err) :reject(err);
if(callback) resolve(callback('Deleted: '+dir));
else resolve('Deleted: '+dir);
});
}
else resolve();
}).catch(reject);
});
});
});
};
return delDir(dir);
}
- Aceasta functie: removeDir(), poate sterge recursiv tot directorul sau doar fisierele acestuia.
Exemplu de folosire:
- Sterge recursiv intregul director '.test/dirx/':
// here add the removeDir() function
removeDir('./test/dirx/', true, function(re){console.log(re);});
- Sterge doar fisierele din directorul '.test/dirx/':
// here add the removeDir() function
removeDir('./test/dirx/', false, function(re){console.log(re);});
Modulul fs-extra
O alta optiune pentru a lucra cu usurinta cu directoare si fisiere pe server este modulul
fs-extra.
fs-extra adauga metode file system care nu sunt incluse in modulul nativ "fs" si adauga "promise" suport pentru metodele "fs". Poate fi folosit ca un inlocuitor pentru "fs".
- Inainte de a folosi modulul "fs-extra", trebuie sa il instalezi. Pentru a instala "fs-extra", ruleaza acest cod in interfata command line:
npm install --save fs-extra
Apoi, poti folosi modulul fs-extra in proiectele tale Node.js ca un inlocuitor pentru nativul fs.
const fs = require('fs-extra');
Toate metodele din fs sunt atasate si la fs-extra. Toate metodele "fs" returneaza "promises" daca nu e transmisa o functie callback.
Examplu:
const fs = require('fs-extra')
// Async with promises:
fs.copy('/tmp/dirname/', '/dirx/dirname/')
.then(() => console.log('success!'))
.catch(err => console.error(err));
// Async with callbacks:
fs.copy('/tmp/dirname/', '/dirx/dirname/', err =>{
if (err) return console.error(err);
console.log('success!');
// Sync:
try {
fs.copySync('/tmp/dirname/', '/dirx/dirname/');
console.log('success!');
} catch (err){
console.error(err);
}
});
- Pentru documentatie vezi
modulul fs-extra.