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:
- Utilizarea flag-ului
O_CREAT | O_EXCLla deschiderea fișierului prin apelul sistemuluiopen(POSIX). Flag-ulO_EXCLgarantează 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);
}
- Î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
}
- Î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ă.