28#include "../utility/PError.h"
46 mStreamFileName(filename),
47 mStreamDirection(dir),
57 switch (mStreamDirection)
60 mFileStream =
new fstream(mStreamFileName.c_str(), ios_base::in);
61 if(!mFileStream->is_open())
63 PError::SignalFatalError(
"Unable to open file ["+ mStreamFileName+
"] for reading. It may be in a location you do not have privilege to access.");
69 struct stat stFileInfo;
73 intStat = stat(mStreamFileName.c_str(),&stFileInfo);
75 cout <<
"file attributes: " << intStat << endl;
76 cout <<
"st_mode: "<< stFileInfo.st_mode << endl;
77 cout <<
"st_gid: "<< stFileInfo.st_gid << endl;
78 cout <<
"st_uid: "<< stFileInfo.st_uid << endl;
80 mFileStream =
new fstream(mStreamFileName.c_str(), ios_base::out);
81 if(!mFileStream->is_open())
83 PError::SignalFatalError(
"Unable to open file ["+ mStreamFileName+
"] for writing. Its directory may not exist or it may be in a location you do not have privilege to access.");
89 mFileStream =
new fstream(mStreamFileName.c_str(), ios_base::out | ios_base::app);
90 if(!mFileStream->is_open())
92 PError::SignalFatalError(
"Unable to open file ["+ mStreamFileName+
"] for appending. Its directory may not exist or it may be in a location you do not have privilege to access.");
121 mStreamFileName = filename;
122 mStreamDirection = dir;
129 if(mStreamDirection==
sdRead)
131 mFileStream->open(mStreamFileName.c_str(), ios_base::in);
132 if(!mFileStream->is_open())
137 else if (mStreamDirection==
sdWrite)
139 mFileStream->open(mStreamFileName.c_str(), ios_base::out);
140 if(!mFileStream->is_open())
146 else if (mStreamDirection ==
sdAppend)
148 mFileStream->open(mStreamFileName.c_str(), ios_base::out | ios_base::app);
149 if(!mFileStream->is_open())
174 if(mStreamDirection ==
sdWrite ||
177 (*mFileStream) << character << flush;
181 PError::SignalFatalError(
"Error in PStream::WriteChar--trying to write a Read stream: "+
string(mStreamFileName) +
".");
193 if(mStreamDirection ==
sdWrite ||
197 int len = length < buffer.size()? length: (int)(buffer.size());
199 std::copy(buffer.begin(), buffer.begin()+len, tmp.begin());
200 (* mFileStream) << tmp << flush;
205 PError::SignalFatalError(
"Error in PStream::WriteBuffer--trying to write a Read stream: "+
string(mStreamFileName) +
".");
214 if(mStreamDirection ==
sdWrite ||
217 (* mFileStream) << buffer << flush;
222 PError::SignalFatalError(
"Error in PStream::WriteString--trying to write a Read stream: "+
string(mStreamFileName) +
".");
232 if(mStreamDirection ==
sdRead)
236 mFileStream->get(tmp);
253 if(mStreamDirection ==
sdRead)
256 std::string tmpstring;
258 while(!mFileStream->eof() )
260 tmp = mFileStream->peek();
267 else if(tmp == separator )
269 mFileStream->get(tmp);
274 mFileStream->get(tmp);
292 if(mStreamDirection ==
sdRead)
294 std::string tmpstring;
296 mFileStream->get(tmp);
299 while( !mFileStream->eof())
305 mFileStream->get(tmp);
325 if(mStreamDirection ==
sdRead)
327 std::string tmpstring;
329 mFileStream->get(tmp);
332 while( !mFileStream->eof())
339 mFileStream->get(tmp);
359 if(mFileStream->peek() == 10)
362 if(mFileStream->peek() == 13)
366 streampos curr = mFileStream->tellg();
367 mFileStream->seekg(1,ios_base::cur);
370 if(mFileStream->peek() == 10)
378 mFileStream->seekg(-1,ios_base::cur);
382 if(mFileStream->eof())
390 return mFileStream->eof();
396 mFileStream->close();
410 out <<
"<Generic File Stream>" << flush;
421 }
else if(name==
"DIRECTION")
447 if(name ==
"FILENAME" || name==
"DIRECTION")
@ OVE_INVALID_PROPERTY_NAME
virtual bool SetProperty(std::string name, Variant v)
Variant GetProperty(std::string) const
void WriteChar(const char character)
This method sends a single character to the stream.
virtual std::ostream & SendToStream(std::ostream &out) const
void WriteBuffer(const std::string &buffer, unsigned int length)
virtual ObjectValidationError ValidateProperty(std::string, Variant v) const
virtual bool SetProperty(std::string, Variant v)
std::string ReadLineClean()
virtual ~PStream()
The Standard destructor.
std::string ReadToken(const char separator)
This reads up until the next separator token (or eof character)
PStream(const std::string &filename, StreamDirection dir, StreamType type)
The Standard constructor.
void WriteString(const std::string &buffer)
This method just writes the char* string to the stream.
virtual Variant GetProperty(std::string) const
void Open(const std::string &filename, StreamDirection dir, StreamType type)
void SignalFatalError(const std::string &message)