Avatar ·

Como verificar rapidamente a existência de um arquivo em C++ (C++11/14/17)?

Olá a todos! Escrevo em C++ há cerca de um ano, mas ainda não encontrei a melhor maneira definitiva de verificar se um arquivo existe no disco. O problema é que preciso fazer isso com muita frequência — em um loop, processo centenas de arquivos, e cada milissegundo conta. Atualmente, uso este código:

#include <fstream>
bool fileExists(const std::string& filename) {
    std::ifstream f(filename.c_str());
    return f.good();
}
Ele funciona, mas suspeito que não seja a opção mais rápida, porque abre o arquivo inteiro. Também tentei usar `stat()`:

#include <sys/stat.h>
bool fileExists(const std::string& name) {
    struct stat buffer;
    return (stat(name.c_str(), &buffer) == 0);
}
Mas isso é código dependente de plataforma (Windows não suporta `stat` sem macros adicionais). Ouvi dizer que em C++17 surgiu `std::filesystem`, mas não tenho certeza de quão rápido ele é. Pergunta: qual método é o mais rápido e