2013-06-08 6 views
3

Je suis très très nouveau en C++. Dans mon projet actuel je l'ai déjà inclusC++ Vérifier si le fichier existe

#include <iostream> 
#include <Windows.h> 
#include <TlHelp32.h> 

et je dois juste faire une vérification rapide au début de ma main() pour voir s'il existe une dll nécessaire dans le répertoire de mon programme. Alors, quelle serait la meilleure façon de faire cela?

+0

Voulez-vous dire une DLL requise par votre programme auquel elle est liée? Ou celui que vous envisagez de charger dynamiquement avec LoadLibrary? –

+0

[Chemin unique] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773584 (v = vs.85) .aspx). Selon ce que vous voulez, certains appels échoueront si un fichier n'est pas trouvé. – chris

+0

Je vais injecter la DLL dans un autre processus. Et je veux simplement terminer mon programme, si la DLL n'existe pas. Je veux juste une vérification rapide avant que mon programme ne fasse autre chose. Comment utiliser PathFileExists? Comme le chemin n'est pas toujours le même ... – forivin

Répondre

7

Donc, en supposant qu'il est bon de vérifier simplement que le fichier avec le bon nom EXISTE dans le même répertoire:

#include <fstream> 

... 

void check_if_dll_exists() 
{ 
    std::ifstream dllfile(".\\myname.dll", std::ios::binary); 
    if (!dllfile) 
    { 
     ... DLL doesn't exist... 
    } 
} 

Si vous voulez savoir qu'il est en fait une véritable DLL (plutôt que quelqu'un l'ouverture d'une commande rapide et faire type NUL: > myname.dll pour créer un fichier vide), vous pouvez utiliser:

HMODULE dll = LoadLibrary(".\\myname.dll"); 

if (!dll) 
{ 
    ... dll doesn't exist or isn't a real dll.... 
} 
else 
{ 
    FreeLibrary(dll); 
} 
6

Il y a plusieurs façons d'abondance que vous pouvez réaliser, mais en utilisant la bibliothèque boost est toujours une bonne façon.

#include <boost/filesystem.hpp> 
using boost::filesystem; 

if (!exists("lib.dll")) { 
    std::cout << "dll does not exists." << std::endl; 
}