Как определить, есть ли файл на диске
Страница 9. Способ 9 (Pure C метод std::ifstream, ::ifstream)


 

Способ 9 (Pure C++ метод std::ifstream, ::ifstream)

Данный метод состоит в создании временного объекта класса ifstream. Если файл с указанным именем не существует то operator void *() этого класса возвращает NULL pointer - иначе возвращается указатель на сам созданный об'ект (this). Это значение проверяется на NULL pointer - и ... все.


#include <fstream>
 
bool FileExists (const char *fname)
{
    return std::ifstream(fname) != NULL;
}

... вернее почти все =)

В данном коде ifstream это typedef basic_ifstream<char, char_traits<char> > ifstream; если же Вы пользуетесь старыми заголовочными файлами (с разширением .h) - то для Вас ifstream - это никакой не typedef - а самый настоящий класс. И все было бы прекрасно - если бы не одно но - в этом случае конструктор с именем файла в качестве параметра СОЗДАСТ файл (если он не существует) и в любом случаем проверка на существование файла даст положительный результат. Дело в том что для "старого" ifstream'а надо явно указывать что НЕ надо создавать файл через добавление флага ios::nocreate во втором параметре конструктора. А вот и сам код для такого случая:


            
#include <fstream.h>
 
bool FileExists (const char *fname)
{
    return ::ifstream(fname, ios::in | ios::nocreate) != NULL;
}

Данный метод хорош тем что он 100% портабелен - то есть используются только возможности самого языка С++ (в лице его стандартной библиотеки - которая является его частью).

 
« Предыдущая статья   Следующая статья »