Zserio C++ runtime library  1.0.1
Built for Zserio 2.14.0
FileUtil.cpp
Go to the documentation of this file.
1 #include <fstream>
2 
4 #include "zserio/FileUtil.h"
5 #include "zserio/StringView.h"
6 
7 namespace zserio
8 {
9 
10 void writeBufferToFile(const uint8_t* buffer, size_t bitSize, BitsTag, const std::string& fileName)
11 {
12  std::ofstream stream(fileName.c_str(), std::ofstream::binary | std::ofstream::trunc);
13  if (!stream)
14  throw CppRuntimeException("writeBufferToFile: Failed to open '") << fileName << "' for writing!";
15 
16  const size_t byteSize = (bitSize + 7) / 8;
17  stream.write(reinterpret_cast<const char*>(buffer), static_cast<std::streamsize>(byteSize));
18  if (!stream)
19  throw CppRuntimeException("writeBufferToFile: Failed to write '") << fileName << "'!";
20 }
21 
23 {
24  std::ifstream stream(fileName.c_str(), std::ifstream::binary);
25  if (!stream)
26  throw CppRuntimeException("readBufferFromFile: Cannot open '") << fileName << "' for reading!";
27 
28  stream.seekg(0, stream.end);
29  const std::streampos fileSize = stream.tellg();
30  stream.seekg(0);
31 
32  if (static_cast<int>(fileSize) == -1)
33  throw CppRuntimeException("readBufferFromFile: Failed to get file size of '") << fileName << "'!";
34 
35  const size_t sizeLimit = std::numeric_limits<size_t>::max() / 8;
36  if (static_cast<uint64_t>(fileSize) > sizeLimit)
37  {
38  throw CppRuntimeException("readBufferFromFile: File size exceeds limit '") << sizeLimit << "'!";
39  }
40 
41  zserio::BitBuffer bitBuffer(static_cast<size_t>(fileSize) * 8);
42  stream.read(reinterpret_cast<char*>(bitBuffer.getBuffer()),
43  static_cast<std::streamsize>(bitBuffer.getByteSize()));
44  if (!stream)
45  throw CppRuntimeException("readBufferFromFile: Failed to read '") << fileName << "'!";
46 
47  return bitBuffer;
48 }
49 
50 } // namespace zserio
size_t getByteSize() const
Definition: BitBuffer.h:389
const uint8_t * getBuffer() const
Definition: BitBuffer.h:371
zserio::string< PropagatingPolymorphicAllocator< char > > string
Definition: String.h:15
void writeBufferToFile(const uint8_t *buffer, size_t bitSize, BitsTag, const std::string &fileName)
Definition: FileUtil.cpp:10
BitBuffer readBufferFromFile(const std::string &fileName)
Definition: FileUtil.cpp:22