Junior — Middle
Milyen módon biztosítható, hogy egy fájl csak akkor jöjjön létre, ha még nem létezik?
sobes.tech MI
Válasz az MI-től
C/C++-ban több módszer is van arra, hogy csak akkor hozzunk létre fájlt, ha az még nem létezik:
- A
O_CREAT | O_EXCLzászló használata aopenrendszerhívás során (POSIX). AzO_EXCLzászló garantálja, hogy a fájl csak akkor jön létre, ha még nem létezik, különben a hívás hibával ér véget.
#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("A fájl már létezik vagy hiba");
} else {
// Sikeres fájl létrehozás
close(fd);
}
- A C++ szabványos könyvtárában az
<filesystem>segítségével ellenőrizhető a fájl létezése (C++17-től kezdve), és ha nem létezik, akkor létrehozható:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// fájl létrehozva
}
- C-ben először a
fopensegítségével ellenőrizhető a fájl létezése olvasási módban, és ha nem található, akkor írási módban nyitható meg. Ez a módszer azonban nem atomikus, és versenyhelyzethez vezethet több szálas környezetben.
Ezért a legmegbízhatóbb módszer az, hogy a open-t O_CREAT | O_EXCL zászlókkal használjuk, így csak akkor hozunk létre fájlt, ha az még nem létezik, atomikusan.