Проверить, существует ли файл в C++

Я очень новичок в C++. В моем текущем проекте я уже включил

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

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


person forivin    schedule 08.06.2013    source источник
comment
Вы имеете в виду DLL, требуемую вашей программой, с которой она связана? Или тот, который вы планируете динамически загружать с помощью LoadLibrary?   -  person Mats Petersson    schedule 09.06.2013
comment
В одну сторону. В зависимости от того, что вы хотите, некоторые вызовы завершатся ошибкой, если файл также не будет найден.   -  person chris    schedule 09.06.2013
comment
Я собираюсь внедрить dll в другой процесс. И я просто хочу завершить свою программу, если dll не существует. Я просто хочу быстро проверить это, прежде чем моя программа сделает что-нибудь еще. Как мне использовать PathFileExists? Так как путь не всегда один и тот же...   -  person forivin    schedule 09.06.2013
comment
Попробуйте загрузить DLL, так как вам все равно придется это сделать. Если он не загружается, код ошибки сообщит вам, почему.   -  person Jonathan Potter    schedule 09.06.2013


Ответы (2)


Итак, предположим, что можно просто проверить, что файл с правильным именем СУЩЕСТВУЕТ в том же каталоге:

#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);
}
person Mats Petersson    schedule 08.06.2013

Есть много способов добиться этого, но всегда лучше использовать библиотеку boost.

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

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