00001 /* +---------------------------------------------------------------------------+ 00002 | The Mobile Robot Programming Toolkit (MRPT) C++ library | 00003 | | 00004 | http://mrpt.sourceforge.net/ | 00005 | | 00006 | Copyright (C) 2005-2009 University of Malaga | 00007 | | 00008 | This software was written by the Machine Perception and Intelligent | 00009 | Robotics Lab, University of Malaga (Spain). | 00010 | Contact: Jose-Luis Blanco <jlblanco@ctima.uma.es> | 00011 | | 00012 | This file is part of the MRPT project. | 00013 | | 00014 | MRPT is free software: you can redistribute it and/or modify | 00015 | it under the terms of the GNU General Public License as published by | 00016 | the Free Software Foundation, either version 3 of the License, or | 00017 | (at your option) any later version. | 00018 | | 00019 | MRPT is distributed in the hope that it will be useful, | 00020 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 00021 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 00022 | GNU General Public License for more details. | 00023 | | 00024 | You should have received a copy of the GNU General Public License | 00025 | along with MRPT. If not, see <http://www.gnu.org/licenses/>. | 00026 | | 00027 +---------------------------------------------------------------------------+ */ 00028 #ifndef CFileOutputStream_H 00029 #define CFileOutputStream_H 00030 00031 #include <mrpt/utils/CStream.h> 00032 00033 #include <iostream> 00034 00035 /*--------------------------------------------------------------- 00036 Class 00037 ---------------------------------------------------------------*/ 00038 namespace mrpt 00039 { 00040 namespace utils 00041 { 00042 /** This CStream derived class allow using a file as a write-only, binary stream. 00043 * 00044 * \sa CStream, CFileStream, CFileGZOutputStream 00045 */ 00046 class MRPTDLLIMPEXP CFileOutputStream : public CStream, public CUncopiable 00047 { 00048 protected: 00049 /** Method responsible for reading from the stream. 00050 */ 00051 size_t Read(void *Buffer, size_t Count); 00052 00053 /** Method responsible for writing to the stream. 00054 * Write attempts to write up to Count bytes to Buffer, and returns the number of bytes actually written. 00055 */ 00056 size_t Write(const void *Buffer, size_t Count); 00057 00058 DECLARE_UNCOPIABLE( CFileOutputStream ) 00059 00060 private: 00061 std::ofstream m_of; //!< The actual output file stream. 00062 00063 public: 00064 /** Constructor 00065 * \param fileName The file to be open in this stream 00066 * \param append If set to true, the file will be opened for writing and the current cursor position set at the end of the file. Otherwise, previous contents will be lost. 00067 * \exception std::exception if the file cannot be opened. 00068 */ 00069 CFileOutputStream( 00070 const std::string &fileName, 00071 bool append = false 00072 ); 00073 00074 /** Default constructor 00075 */ 00076 CFileOutputStream(); 00077 00078 /** Open the given file for write 00079 * \param fileName The file to be open in this stream 00080 * \param append If set to true, the file will be opened for writing and the current cursor position set at the end of the file. Otherwise, previous contents will be lost. 00081 * \sa fileOpenCorrectly 00082 * \return true on success. 00083 */ 00084 bool open(const std::string &fileName, bool append = false ); 00085 00086 /** Close the stream. */ 00087 void close(); 00088 00089 /** Destructor 00090 */ 00091 virtual ~CFileOutputStream(); 00092 00093 /** Says if file was open successfully or not. 00094 */ 00095 bool fileOpenCorrectly(); 00096 00097 /** Method for moving to a specified position in the streamed resource. 00098 * See documentation of CStream::Seek 00099 */ 00100 size_t Seek(long Offset, CStream::TSeekOrigin Origin = sFromBeginning); 00101 00102 /** Method for getting the total number of bytes writen to buffer. 00103 */ 00104 size_t getTotalBytesCount(); 00105 00106 /** Method for getting the current cursor position, where 0 is the first byte and TotalBytesCount-1 the last one. 00107 */ 00108 size_t getPosition(); 00109 00110 00111 }; // End of class def. 00112 00113 } // End of namespace 00114 } // end of namespace 00115 #endif
Page generated by Doxygen 1.6.1 for MRPT 0.7.1 SVN: at Tue Dec 22 08:29:35 CET 2009 |