Junior — Middle
De que formas é que se pode garantir a criação de um ficheiro apenas na ausência dele?
sobes.tech IA
Resposta da IA
Em C/C++, pode garantir a criação de um ficheiro apenas se ele não existir de várias formas:
- Utilizando a flag
O_CREAT | O_EXCLao abrir o ficheiro através da chamada de sistemaopen(POSIX). A flagO_EXCLgarante que o ficheiro será criado apenas se ainda não existir, caso contrário, a chamada terminará com um erro.
#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("O ficheiro já existe ou erro");
} else {
// Ficheiro criado com sucesso
close(fd);
}
- Na biblioteca padrão de C++, pode verificar a existência do ficheiro usando
<filesystem>(a partir do C++17) e criar o ficheiro se não existir:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// ficheiro criado
}
- Em C, pode primeiro verificar a existência do ficheiro usando
fopenem modo leitura, e se o ficheiro não for encontrado, abri-lo em modo escrita. Mas esta abordagem não é atómica e pode levar a condições de corrida em ambientes multithread.
Assim, a forma mais fiável é usar open com as flags O_CREAT | O_EXCL para criar o ficheiro de forma atómica apenas se ele não existir.