Sobes.tech
Junior — Middle

Cu ce metode se poate asigura crearea unui fișier doar în cazul în care acesta lipsește?

sobes.tech AI

Răspuns de la AI

În C/C++ se poate asigura crearea unui fișier doar dacă acesta nu există, folosind mai multe metode:

  1. Utilizarea flag-ului O_CREAT | O_EXCL la deschiderea fișierului prin apelul sistemului open (POSIX). Flag-ul O_EXCL garantează că fișierul va fi creat doar dacă nu există încă, altfel apelul va eșua cu o eroare.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int fd = open("file.txt", O_CREAT | O_EXCL | O_WRONLY, 0644);
if (fd == -1) {
    perror("Fișierul există deja sau eroare");
} else {
    // Fișier creat cu succes
    close(fd);
}
  1. În biblioteca standard C++, puteți verifica existența fișierului folosind <filesystem> (începând cu C++17) și crea fișierul dacă nu există:
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // fișier creat
}
  1. În C, puteți verifica mai întâi existența fișierului cu fopen în modul citire, iar dacă fișierul nu este găsit, îl puteți deschide pentru scriere. Dar această metodă nu este atomică și poate duce la condiții de cursă în medii multithread.

Prin urmare, cea mai fiabilă metodă este să folosiți open cu flag-urile O_CREAT | O_EXCL pentru a crea fișierul în mod atomic doar dacă nu există.