2013-06-08 8 views
3

Я очень новичок в C++. В моем текущем проекте я уже включенC++ Проверьте, существует ли файл

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

и мне просто нужно, чтобы сделать быструю проверку в самом начале моей основной(), чтобы увидеть, если требуется DLL существует в каталоге моей программы. Так что было бы лучшим способом для меня сделать это?

+0

Вы хотите сказать, что у вас есть DLL, необходимая для вашей программы, против которой она была связана? Или тот, который вы планируете динамически загружать с помощью LoadLibrary? –

+0

[В одну сторону] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773584 (v = vs.85) .aspx). В зависимости от того, что вы хотите, некоторые вызовы будут терпеть неудачу, если файл также не найден. – chris

+0

Я собираюсь ввести dll в другой процесс. И я просто хочу закончить свою программу, если DLL не существует. Я просто хочу быстро проверить это, прежде чем моя программа сделает что-нибудь еще. Как использовать PathFileExists? Поскольку путь не всегда один и тот же ... – forivin

ответ

7

Итак, если предположить, что это нормально, чтобы просто проверить, что файл с правильным именем EXISTS в том же каталоге:

#include <fstream> 

... 

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

Если вы хотите знать, что на самом деле это реальная DLL (а не кто-то открывающей команду быстрое и делает type NUL: > myname.dll создать пустой файл), вы можете использовать:

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

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

есть много способов, вы можете достичь этого, но с использованием библиотеки наддува всегда хороший способ.

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

if (!exists("lib.dll")) { 
    std::cout << "dll does not exists." << std::endl; 
} 
Смежные вопросы