Program Listing for File FileReader.cpp

Return to documentation for file (Source\Platform\Src\Utils\FileReader.cpp)

#include "Utils/FileReader.h"

#include <fstream>
#include <iterator>

namespace Azura {

Containers::Vector<U8> FileReader::GetFileContents(const String& filePath, Memory::Allocator& allocator) {
  std::ifstream fileStream(filePath, std::ios::binary);
  Containers::Vector<U8> buffer(allocator);

  if (!fileStream.good())
  {
    throw std::runtime_error("Can't find File");
  }

  fileStream.seekg(0, std::ios::end);
  buffer.Resize(U32(fileStream.tellg()));
  fileStream.seekg(0, std::ios::beg);

  buffer.Assign(std::istreambuf_iterator<char>(fileStream), std::istreambuf_iterator<char>());

  fileStream.close();

  return buffer;
}

void FileReader::GetFileContents(const String& filePath, Containers::Vector<U8>& buffer) {
  std::ifstream fileStream(filePath, std::ios::binary);

  if (!fileStream.good())
  {
    throw std::runtime_error("Can't find File");
  }

  fileStream.seekg(0, std::ios::end);
  buffer.Resize(U32(fileStream.tellg()));
  fileStream.seekg(0, std::ios::beg);

  buffer.Assign(std::istreambuf_iterator<char>(fileStream), std::istreambuf_iterator<char>());

  fileStream.close();
}

SizeType FileReader::GetFileSize(const String& filePath) {
  std::ifstream fileStream(filePath);

  fileStream.seekg(0, std::ios::end);
  const auto size = SizeType(fileStream.tellg());
  fileStream.close();

  return size;
}
}  // namespace Azura