Main MRPT website > C++ reference for MRPT 1.9.9
CFileOutputStream.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "io-precomp.h" // Precompiled headers
11 
13 #include <mrpt/core/exceptions.h>
14 
15 using namespace mrpt::io;
16 using namespace std;
17 
18 CFileOutputStream::CFileOutputStream(const string& fileName, bool append)
19  : m_of()
20 {
22 
23  if (!open(fileName, append))
25  "Error creating/opening for write file: '%s'", fileName.c_str());
26 
27  MRPT_END
28 }
29 
31 bool CFileOutputStream::open(const string& fileName, bool append)
32 {
33  close();
34 
35  // Open for write/append:
36  ios_base::openmode openMode = ios_base::binary | ios_base::out;
37  if (append) openMode |= ios_base::app;
38 
39  m_of.open(fileName.c_str(), openMode);
40  return m_of.is_open();
41 }
42 
44 {
45  if (m_of.is_open()) m_of.close();
46 }
47 
49 size_t CFileOutputStream::Read(void* Buffer, size_t Count)
50 {
51  MRPT_UNUSED_PARAM(Buffer);
52  MRPT_UNUSED_PARAM(Count);
53  THROW_EXCEPTION("Trying to read from a write file stream.");
54 }
55 
56 size_t CFileOutputStream::Write(const void* Buffer, size_t Count)
57 {
58  if (!m_of.is_open()) return 0;
59 
60  m_of.write(static_cast<const char*>(Buffer), Count);
61  return m_of.fail() ? 0 : Count;
62 }
63 
65 {
66  if (!m_of.is_open()) return 0;
67 
68  ofstream::off_type offset = Offset;
69  ofstream::seekdir way;
70 
71  switch (Origin)
72  {
73  case sFromBeginning:
74  way = ios_base::beg;
75  break;
76  case sFromCurrent:
77  way = ios_base::cur;
78  break;
79  case sFromEnd:
80  way = ios_base::end;
81  break;
82  default:
83  THROW_EXCEPTION("Invalid value for 'Origin'");
84  }
85 
86  m_of.seekp(offset, way);
87  return getPosition();
88 }
89 
91 {
92  if (!fileOpenCorrectly()) return 0;
93 
94  auto& f = const_cast<std::ofstream&>(m_of);
95 
96  const uint64_t previousPos = f.tellp();
97  f.seekp(0, ios_base::end);
98  uint64_t fileSize = f.tellp();
99  f.seekp(previousPos, ios_base::beg);
100  return fileSize;
101 }
102 
104 {
105  auto& f = const_cast<std::ofstream&>(m_of);
106  if (m_of.is_open())
107  return f.tellp();
108  else
109  return 0;
110 }
111 
112 bool CFileOutputStream::fileOpenCorrectly() const { return m_of.is_open(); }
mrpt::io::CStream::TSeekOrigin
TSeekOrigin
Used in CStream::Seek.
Definition: io/CStream.h:34
mrpt::io::CFileOutputStream::close
void close()
Close the stream.
Definition: CFileOutputStream.cpp:43
exceptions.h
mrpt::io::CFileOutputStream::Write
size_t Write(const void *Buffer, size_t Count) override
Introduces a pure virtual method responsible for writing to the stream.
Definition: CFileOutputStream.cpp:56
mrpt::io::CFileOutputStream::open
bool open(const std::string &fileName, bool append=false)
Open the given file for write.
Definition: CFileOutputStream.cpp:31
mrpt::io
Definition: img/CImage.h:22
CFileOutputStream.h
end
GLuint GLuint end
Definition: glext.h:3528
mrpt::io::CFileOutputStream::~CFileOutputStream
virtual ~CFileOutputStream()
Destructor.
Definition: CFileOutputStream.cpp:48
MRPT_UNUSED_PARAM
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
Definition: common.h:186
mrpt::io::CFileOutputStream::getTotalBytesCount
uint64_t getTotalBytesCount() const override
Method for getting the total number of bytes writen to buffer.
Definition: CFileOutputStream.cpp:90
int64_t
__int64 int64_t
Definition: rptypes.h:49
THROW_EXCEPTION_FMT
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
Definition: exceptions.h:43
THROW_EXCEPTION
#define THROW_EXCEPTION(msg)
Definition: exceptions.h:41
mrpt::io::CFileOutputStream::m_of
std::ofstream m_of
The actual output file stream.
Definition: io/CFileOutputStream.h:28
offset
GLintptr offset
Definition: glext.h:3925
mrpt::io::CFileOutputStream::getPosition
uint64_t getPosition() const override
Method for getting the current cursor position, where 0 is the first byte and TotalBytesCount-1 the l...
Definition: CFileOutputStream.cpp:103
MRPT_START
#define MRPT_START
Definition: exceptions.h:262
mrpt::io::CStream::sFromBeginning
@ sFromBeginning
Definition: io/CStream.h:36
uint64_t
unsigned __int64 uint64_t
Definition: rptypes.h:50
mrpt::io::CFileOutputStream::fileOpenCorrectly
bool fileOpenCorrectly() const
Returns true if the file was open without errors.
Definition: CFileOutputStream.cpp:112
mrpt::io::CFileOutputStream::Seek
uint64_t Seek(int64_t Offset, CStream::TSeekOrigin Origin=sFromBeginning) override
Introduces a pure virtual method for moving to a specified position in the streamed resource.
Definition: CFileOutputStream.cpp:64
mrpt::io::CFileOutputStream::CFileOutputStream
CFileOutputStream()
Default constructor.
Definition: CFileOutputStream.cpp:30
mrpt::io::CFileOutputStream::Read
size_t Read(void *Buffer, size_t Count) override
Introduces a pure virtual method responsible for reading from the stream.
Definition: CFileOutputStream.cpp:49
MRPT_END
#define MRPT_END
Definition: exceptions.h:266
mrpt::io::CStream::sFromEnd
@ sFromEnd
Definition: io/CStream.h:38
mrpt::io::CStream::sFromCurrent
@ sFromCurrent
Definition: io/CStream.h:37
io-precomp.h



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST