From 47a0d9b5a128ef537693055da194e552476bc2f4 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 15 Jan 2012 16:53:40 +0000 Subject: added filesystem::OFileStream class. --- src/filesystem/filestream.cc | 85 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 18 deletions(-) (limited to 'src/filesystem/filestream.cc') diff --git a/src/filesystem/filestream.cc b/src/filesystem/filestream.cc index 53c72d8..8218a48 100644 --- a/src/filesystem/filestream.cc +++ b/src/filesystem/filestream.cc @@ -10,50 +10,56 @@ namespace filesystem { +/* ---- class IFileStream ------------------------------------------ */ + IFileStream::IFileStream(const char *name) : std::ifstream() { - if (name) - fstream_name.assign(name); - - open(name); + if (name && name[0]) { + open(name); + } } -IFileStream::IFileStream(const std::string &name) : std::ifstream(), fstream_name(name) +IFileStream::IFileStream(const std::string &name) : std::ifstream(), ifstream_name(name) { - open(fstream_name); + if (name.size()) { + open(ifstream_name); + } } void IFileStream::open(const char *name) { - if (!name) { + if (!name || !name[0]) { if (is_open()) { close(); } - fstream_name.clear(); - fstream_filename.clear(); + ifstream_name.clear(); + ifstream_filename.clear(); return; } - fstream_name.assign(name); - + ifstream_name.assign(name); + for (SearchPath::iterator path = searchpath().begin(); path != searchpath().end(); path++) { - fstream_filename.assign((*path)); - fstream_filename.append(fstream_name); + 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(fstream_filename)) { - std::ifstream::open(fstream_filename.c_str()); - if (good()) + 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; + } + } } - fstream_filename.clear(); + ifstream_filename.clear(); } void IFileStream::open(const std::string &name) @@ -61,4 +67,47 @@ 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()); +} + } -- cgit v1.2.3