Sobes.tech
Junior — Middle

Op welke manieren kan het creëren van een bestand alleen worden gegarandeerd in het geval dat het niet bestaat?

sobes.tech AI

Antwoord van AI

In C/C++ kan het creëren van een bestand alleen worden gegarandeerd als het niet bestaat, op verschillende manieren:

  1. Gebruik de vlag O_CREAT | O_EXCL bij het openen van het bestand via de systeemoproep open (POSIX). De vlag O_EXCL garandeert dat het bestand alleen wordt gemaakt als het nog niet bestaat, anders eindigt de oproep met een fout.
#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("Bestand bestaat al of fout");
} else {
    // Bestand succesvol gemaakt
    close(fd);
}
  1. In de standaardbibliotheek van C++ kun je controleren of het bestand bestaat met <filesystem> (vanaf C++17) en het bestand maken als het niet bestaat:
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // bestand gemaakt
}
  1. In C kun je eerst controleren of het bestand bestaat met fopen in leermodus, en als het niet wordt gevonden, open je het in schrijfmodes. Maar deze aanpak is niet atomair en kan leiden tot racecondities in multithread-omgevingen.

De meest betrouwbare methode is dus om open te gebruiken met de vlaggen O_CREAT | O_EXCL om het bestand atomair te maken, alleen als het niet bestaat.