CFileInputStream.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "StdInc.h"
  2. #include "CFileInputStream.h"
  3. #include "CFileInfo.h"
  4. CFileInputStream::CFileInputStream()
  5. {
  6. }
  7. CFileInputStream::CFileInputStream(const std::string & file)
  8. {
  9. open(file);
  10. }
  11. CFileInputStream::CFileInputStream(const CFileInfo & file)
  12. {
  13. open(file);
  14. }
  15. CFileInputStream::~CFileInputStream()
  16. {
  17. close();
  18. }
  19. void CFileInputStream::open(const std::string & file)
  20. {
  21. close();
  22. fileStream.open(file.c_str(), std::ios::in | std::ios::binary);
  23. if (fileStream.fail())
  24. {
  25. throw std::runtime_error("File " + file + " isn't available.");
  26. }
  27. }
  28. void CFileInputStream::open(const CFileInfo & file)
  29. {
  30. open(file.getName());
  31. }
  32. si64 CFileInputStream::read(ui8 * data, si64 size)
  33. {
  34. fileStream.read(reinterpret_cast<char *>(data), size);
  35. return fileStream.gcount();
  36. }
  37. si64 CFileInputStream::seek(si64 position)
  38. {
  39. si64 diff = tell();
  40. fileStream.seekg(position);
  41. return tell() - diff;
  42. }
  43. si64 CFileInputStream::tell()
  44. {
  45. return fileStream.tellg();
  46. }
  47. si64 CFileInputStream::skip(si64 delta)
  48. {
  49. si64 diff = tell();
  50. fileStream.seekg(delta, std::ios::cur);
  51. return tell() - diff;
  52. }
  53. si64 CFileInputStream::getSize()
  54. {
  55. fileStream.seekg(0, std::ios::end);
  56. return fileStream.tellg();
  57. }
  58. void CFileInputStream::close()
  59. {
  60. if (fileStream.is_open())
  61. {
  62. fileStream.close();
  63. }
  64. }