Junior — Middle
W jaki sposób można zapewnić tworzenie pliku tylko w przypadku jego braku?
sobes.tech AI
Odpowiedź od AI
W C/C++ można zapewnić utworzenie pliku tylko wtedy, gdy nie istnieje, na kilka sposobów:
- Użycie flagi
O_CREAT | O_EXCLpodczas otwierania pliku za pomocą wywołania systemowegoopen(POSIX). FlagaO_EXCLgwarantuje, że plik zostanie utworzony tylko jeśli jeszcze nie istnieje, w przeciwnym razie wywołanie zakończy się błędem.
#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("Plik już istnieje lub błąd");
} else {
// Plik został pomyślnie utworzony
close(fd);
}
- W standardowej bibliotece C++ można sprawdzić istnienie pliku za pomocą
<filesystem>(od C++17) i utworzyć plik, jeśli go nie ma:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// plik utworzony
}
- W C można najpierw sprawdzić istnienie pliku za pomocą
fopenw trybie odczytu, a jeśli plik nie zostanie znaleziony, otworzyć go w trybie zapisu. Jednak takie podejście nie jest atomowe i może prowadzić do warunków wyścigu w środowiskach wielowątkowych.
Dlatego najbezpieczniejszym sposobem jest użycie open z flagami O_CREAT | O_EXCL, aby atomowo utworzyć plik tylko wtedy, gdy nie istnieje.