/* 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 { /* ---- class IFileStream ------------------------------------------ */ IFileStream::IFileStream(const char *name) : std::ifstream() { if (name && name[0]) { open(name); } } IFileStream::IFileStream(const std::string &name) : std::ifstream(), ifstream_name(name) { if (name.size()) { open(ifstream_name); } } void IFileStream::open(const char *name) { if (!name || !name[0]) { if (is_open()) { close(); } ifstream_name.clear(); ifstream_filename.clear(); return; } ifstream_name.assign(name); for (SearchPath::iterator path = searchpath().begin(); path != searchpath().end(); path++) { ifstream_filename.assign((*path)); ifstream_filename.append(ifstream_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(ifstream_filename)) { std::ifstream::open(ifstream_filename.c_str()); if (good()) { return; } else { con_warn << "Could not read file " << filename() << std::endl; } } } ifstream_filename.clear(); } void IFileStream::open(const std::string &name) { open(name.c_str()); } /* ---- class OFileStream ------------------------------------------ */ OFileStream::OFileStream(const char *name) : std::ofstream() { if (name && name[0]) { open(name); } } OFileStream::OFileStream(const std::string &name) : std::ofstream(), ofstream_name(name) { if (name.size()) { open(ofstream_name); } } void OFileStream::open(const char *name) { if (!name || !name[0]) { if (is_open()) { close(); } ofstream_name.clear(); ofstream_filename.clear(); return; } ofstream_name.assign(name); ofstream_filename.assign(writedir()); ofstream_filename.append(ofstream_name); std::ofstream::open(ofstream_filename.c_str()); if (!good()) { ofstream_filename.clear(); } } void OFileStream::open(const std::string &name) { open(name.c_str()); } }