Sobes.tech
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:

  1. Uso del flag O_CREAT | O_EXCL al abrir el archivo mediante la llamada al sistema open (POSIX). El flag O_EXCL garantiza 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);
}
  1. 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
}
  1. En C, primero se puede verificar la existencia del archivo mediante fopen en 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.