00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "StStreamFile.h"
00025 #include <iostream>
00026
00027
00028 StStreamFile::~StStreamFile() { close(); }
00029
00030 void StStreamFile::open(const char *fileName, ios_base::openmode mode)
00031 {
00032 if (fFilename==fileName && is_open() ) {
00033 fStream.clear();
00034 fStream.seekg (0, ios::beg);
00035 } else {
00036 close();
00037 fFilename=fileName;
00038 fStream.clear();
00039 fStream.open(fFilename.c_str(),mode);
00040 }
00041 if (Debug()) Perror("StStreamFile::open");
00042 }
00043
00044
00045 void StStreamFile::close()
00046 {
00047 if (is_open()) {
00048 fStream.clear();
00049 fStream.close();
00050 fFilename.erase();
00051 closeFileSignal();
00052 }
00053 }
00054
00055 istream &StStreamFile::read(char *s, streamsize n)
00056 {
00057 fStream.clear();
00058 fStream.read(s,n);
00059 if (Debug()) Perror("StStreamFile::read");
00060 return fStream;
00061 }
00062
00063 void StStreamFile::Perror(const char *header) const
00064 {
00065 if (!good()) {
00066 if (header && header[0]) std::cerr << header << ": ";
00067 std::cerr << " StStreamFile I/O error: "
00068 << " fail=" << fail()
00069 << "; bad=" << bad()
00070 << "; eof=" << eof()
00071 << " for <" << fFilename <<"> "
00072 << " open=" << ((StStreamFile *)this)->is_open()
00073 << std::endl;
00074 } else if (Debug()) {
00075 if (header && header[0]) std::cerr << header << ": ";
00076 std::cerr << "There was no I/O Error"
00077 << " for <" << fFilename <<"> "
00078 << std::endl;
00079 }
00080 }