#include "Fichier.h" #include CFichier::CFichier(const char *nomFile, std::ios_base::openmode mode):_FileName(nomFile),_mode(mode),_buffer("") { if(nomFile[0] != '\0') { _File.open(nomFile, mode); } } CFichier::CFichier(const std::string& nomFile, std::ios_base::openmode mode):_FileName(nomFile),_mode(mode),_buffer("") { if(!nomFile.empty()) { _File.open(nomFile.c_str(), mode); } } CFichier::~CFichier() { if(_File.is_open()) { _File.flush(); _File.close(); } } bool CFichier::is_open() { return _File.is_open(); } bool CFichier::open(std::ios_base::openmode mode) { _File.open(_FileName.c_str(), mode); return _File.is_open(); } bool CFichier::reopen() { _File.open(_FileName.c_str(), _mode); return _File.is_open(); } void CFichier::close() { _File.flush(); _File.close(); } int CFichier::remove() { _File.flush(); _File.close(); return std::remove(_FileName.c_str()); } std::streamsize CFichier::read(std::streamsize len) { return read(0, len); } std::streamsize CFichier::read(std::streampos pos, std::streamsize len) { if(!_File.is_open()) { return -1; } if(pos<0) { return -2; } if(len<0) { return -3; } if(!len) len=size(); _File.seekg(pos); char *charBuffer = new char [len]; _File.read(charBuffer, len); std::streamsize actuallyRead = _File.gcount(); _buffer.clear(); if(actuallyRead>0) _buffer.assign(charBuffer, actuallyRead); delete [] charBuffer; return actuallyRead; } std::streamsize CFichier::write(const std::string &s) const { std::ostream outStream(_File.rdbuf()); outStream.write(s.c_str(), (std::streamsize)s.length()); return (std::streamsize) s.length(); } std::streamsize CFichier::write(const char *s, long len) const { std::ostream outStream(_File.rdbuf()); outStream.write(s, len); return len; } const std::string &CFichier::getBuffer() { return _buffer; } const unsigned char CFichier::getBuffer(long i) { return _buffer[i]; } std::streamsize CFichier::size() { std::ifstream::pos_type current_pos = _File.tellg(); _File.seekg(0, std::ios_base::beg); std::ifstream::pos_type begin_pos = _File.tellg(); _File.seekg(0, std::ios_base::end); std::ifstream::pos_type end_pos = _File.tellg(); _File.seekg(current_pos, std::ios_base::beg); return static_cast(end_pos - begin_pos); } const std::string &CFichier::getName() { return _FileName; } void CFichier::operator<< (const char *str) { _File << str; } void CFichier::operator<< (const unsigned char *str) { _File << str; } void CFichier::operator<< (const std::string &str) { _File << str.c_str(); } void CFichier::operator<< (const std::ostringstream &stream) { _File << stream; }