/* filesystem/ifilestream.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "filesystem/filesystem.h" #include "filesystem/filestream.h" namespace filesystem { IFileStream::IFileStream(const char *name) : std::ifstream() { if (name) fstream_name.assign(name); open(name); } IFileStream::IFileStream(const std::string &name) : std::ifstream(), fstream_name(name) { open(fstream_name); } void IFileStream::open(const char *name) { if (!name) { if (is_open()) { close(); } fstream_name.clear(); fstream_filename.clear(); return; } fstream_name.assign(name); for (SearchPath::iterator path = searchpath().begin(); path != searchpath().end(); path++) { fstream_filename.assign((*path)); fstream_filename.append(fstream_name); /* #ifdef _WIN32 for (size_t i = 0; i < fstream_filename.size(); i++) if (fstream_filename[i] == '/') fstream_filename[i] = '\\'; #endif */ if (sys::file_exists(fstream_filename)) { std::ifstream::open(fstream_filename.c_str()); if (good()) return; } } fstream_filename.clear(); } void IFileStream::open(const std::string &name) { open(name.c_str()); } }