///////////////////////////////////////////////////////////////////////////// // Name: pokemod/Path.cpp // Purpose: Define a derived class from the std::string for path extensions // Author: Ben Boeckel // Modified by: Ben Boeckel // Created: Tue Feb 20 10:15:43 2007 // Copyright: ©2007 Nerdy Productions // Licence: // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ///////////////////////////////////////////////////////////////////////////// #include "Path.h" PokeGen::PokeMod::Path::Path() { assign(""); } PokeGen::PokeMod::Path::Path(const char *s) { assign(s); Update(); } PokeGen::PokeMod::Path::Path(const std::string &s) { assign(s); Update(); } void PokeGen::PokeMod::Path::Update() { if (!DoesExist()) assign(""); } bool PokeGen::PokeMod::Path::DoesExist() { if (*this == "") return false; std::ifstream test(c_str(), std::ios::in); test.close(); if (test.fail()) return false; return true; } bool PokeGen::PokeMod::Path::HasExtension(const String &ext) { size_t pos = rfind('.'); bool ret = true; String fileExt(substr(pos + 1)); if ((pos == npos) || (pos + 1 == length()) || (fileExt.length() != ext.length())) return false; for (unsigned i = 0; ret && (i < ext.length()); ++i) ret = (tolower(ext[i]) == tolower(fileExt[i])); return ret; } bool PokeGen::PokeMod::Path::CopyTo(const String &dest) { if (!DoesExist()) return false; std::ifstream fcur(c_str(), std::ios::in | std::ios::binary); std::ofstream fcopy(dest.c_str(), std::ios::out | std::ios::binary); if (fcur.bad() || fcopy.bad()) { fcur.close(); fcopy.close(); return false; } while (!fcur.eof()) fcopy.put((char)fcur.get()); fcopy.close(); fcur.close(); return true; }