Как определить, есть ли файл на диске Страница 9. Способ 9 (Pure C метод std::ifstream, ::ifstream)
|
Страница 9 из 11 Способ 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% портабелен - то есть используются только возможности самого языка С++ (в лице его стандартной библиотеки - которая является его частью). |