Junior — Middle
¿De qué maneras se puede garantizar la creación de un archivo solo en caso de que no exista?
sobes.tech AI
Respuesta de la IA
En C/C++, se puede garantizar la creación de un archivo solo si no existe mediante varias formas:
- Uso del flag
O_CREAT | O_EXCLal abrir el archivo mediante la llamada al sistemaopen(POSIX). El flagO_EXCLgarantiza que el archivo solo se creará si aún no existe, de lo contrario, la llamada terminará con un error.
#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("El archivo ya existe o error");
} else {
// Archivo creado con éxito
close(fd);
}
- En la biblioteca estándar de C++, se puede verificar la existencia del archivo usando
<filesystem>(a partir de C++17) y crear el archivo si no existe:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// archivo creado
}
- En C, primero se puede verificar la existencia del archivo mediante
fopenen modo lectura, y si no se encuentra, abrirlo en modo escritura. Pero este método no es atómico y puede conducir a condiciones de carrera en entornos multihilo.
Por lo tanto, la forma más confiable es usar open con los flags O_CREAT | O_EXCL para crear atómicamente el archivo solo si no existe.