[C++] Vérifier l'existence de fichiers

a marqué ce sujet comme résolu.

Bonjour,

J’essaye de vérifier l’existence de deux fichiers envoyés en paramètres de mon programme C++ :

#include <iostream>
using std::cout;
using std::endl;

bool fileExists(const char* fileName)
{
    FILE* fp = NULL; // will not work if you do not have read permissions
    fp = fopen(fileName, "r");
    
    if (!fp)
        return false;
    
    fclose(fp);
    return true;
} 

int main(int argc, char* argv[])
{
    if (argc != 3)
    {
        cout << "Le programme a besoin de deux arguments pour démarrer :"
             << endl << "(1) Le fichier de la base de donnée, au format BLAST"
             << endl << "(2) Le fichier de la protéine d'entrée, au format FASTA."
             << endl;
        exit(1);
    }

    // On vérifie si les fichiers existent
    if (!fileExists(argv[1]) || !fileExists(argv[2]))
    {
        cout << "Merci de renseigner des fichiers valides." << endl;
        exit(1);
    }
    
    return 0;
}

Est-ce une bonne manière de procéder ?
Il existe peut-être une méthode plus simple, plus pro ?

C’est un problème plus complexe qu’il n’en a l’air.

En premier lieux, je dirais que exists ne suffit pas. Car il ne vérifie ni que le chemin spécifié est un bien fichier ni que tu puisses le lire !

Je te conseil de voir la fonction std::filesystem::status plutôt.

Sinon, il y a toujours le problème de désynchronisation. Tu vérifies à un instant T que le fichier existe mais si ça se trouve 3 lignes de code plus loin, il n’existe plus.

En C, cette fonction aurait été bien utile, en C++, j’ai un peu du mal à comprendre l’utilité. On préfère gérer des execptions en C++. On tente de lire le fichier, si ça echoue on regarde pourquoi.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte