Operacje na plikach w Node.js

Tworzenie folderów

Do synchronicznego tworzenia folderów służy funkcja mkdirSync z modułu fs:

const fs = require('fs');
const path = require('path');

// Ścieżka folderu, który chcemy stworzyć:
var dirPath = path.join(__dirname, "new_dir");

try {
  fs.mkdirSync(dirPath);
}
catch(err) {
  // Folderu nie udało się stworzyć
  // (np. dlatego, że już wcześniej istniał)

  console.error(err);
}

Do asynchronicznego tworzenia folderów można używać funkcji mkdir z API promises modułu fs:

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

// Ścieżka folderu, który chcemy stworzyć:
var dirPath = path.join(__dirname, "new_dir");

fsPromises.mkdir(dirPath).then(() => {
  console.log(`Folder ${dirPath} został stworzony.`);
  
}).catch(rejectionReason => {
  // Folderu nie udało się stworzyć
  // (np. dlatego, że już wcześniej istniał)

  console.error(rejectionReason);
});

Sprawdzanie, czy dany folder istnieje

Do synchronicznego sprawdzenia, czy folder o zadanej ścieżce istnieje, służy funkcja existsSync modułu fs:

if (fs.existsSync(dirPath)) {
  console.log(`Folder ${dirPath} istnieje.`);
}

Do asynchronicznego sprawdzenia, czy folder o zadanej ścieżce istnieje, można wykorzystać funkcję access z API promises modułu fs. Jeśli folder nie istnieje, obietnica access zostanie odrzucona:

try {
  await fsPromises.access(dirPath);
} catch {
  console.log(`Folder ${dirPath} nie istnieje.`);
}

Przykładowy program, w którym chcielibyśmy asynchronicznie:

  • określić ścieżkę folderu, w którym zamierzamy przechowywać pliki,
  • sprawdzić, czy ten folder istnieje,
  • jeśli nie istnieje – stworzyć go,
  • kontynuować pracę z plikami, korzystając z tego folderu,

mógłby wyglądać następująco:

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

// Nazwa folderu z plikami:
var filesDirName = "files";

// Cała ścieżka folderu z plikami:
var filesDirPath = path.join(__dirname, filesDirName);

async function main() {
  
  // Sprawdzenie, czy folder "files" istnieje:
  try {
    await fsPromises.access(filesDirPath);
  } catch {
    // Folder "files" nie istnieje, więc go stwórzmy:
    await fsPromises.mkdir(filesDirPath);
  }
  
  // ... dalsze operacje, wykorzystujące folder "files"
}

main()