Junior — Middle
Kuidas tagada faili loomine ainult selle puudumisel?
sobes.tech AI
Vastus AI-lt
C/C++ keeles saab tagada faili loomise ainult siis, kui see veel ei eksisteeri, mitmel viisil:
- Kasutades lipikut
O_CREAT | O_EXCLfaili avamisel süsteemkutsesopen(POSIX). LipikO_EXCLtagab, et fail luuakse ainult siis, kui seda veel ei ole, vastasel juhul lõpeb kõne veaga.
#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("Fail juba eksisteerib või viga");
} else {
// Fail on edukalt loodud
close(fd);
}
- C++ standardraamatukogus saab kontrollida faili olemasolu
<filesystem>abil (alates C++17) ja luua faili, kui seda ei ole:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// fail loodud
}
- C keeles saab esmalt kontrollida faili olemasolu
fopenabil lugemisrežiimis, ja kui faili ei leidu, avada see kirjutamisrežiimis. Kuid see meetod ei ole atomiline ja võib põhjustada konkurentsitingimusi mitme niidiga keskkonnas.
Seetõttu on kõige usaldusväärsem viis kasutada open koos lipikutega O_CREAT | O_EXCL, et atomiliselt luua fail ainult siis, kui see veel ei eksisteeri.