Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "StdAFx.h"
- #include "BinFile.h"
- BinFile::BinFile(const std::wstring& fileName) {
- mFile = CreateFile(fileName.c_str(), FILE_READ_ACCESS, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr);
- if(mFile == INVALID_HANDLE_VALUE) {
- uint32 err = GetLastError();
- throw std::exception("File not found!");
- }
- LARGE_INTEGER size;
- GetFileSizeEx(mFile, &size);
- mMapping = CreateFileMapping(mFile, nullptr, PAGE_READWRITE, size.HighPart, size.LowPart, nullptr);
- mFileView = MapViewOfFile(mMapping, FILE_MAP_READ, 0, 0, 0);
- }
- BinFile::~BinFile() {
- if(mFile != INVALID_HANDLE_VALUE) {
- CloseHandle(mFile);
- }
- if(mFileView != nullptr) {
- UnmapViewOfFile(mFileView);
- }
- if(mMapping != nullptr) {
- CloseHandle(mMapping);
- }
- }
- LPBYTE BinFile::getPointer(uint32 offset) {
- return ((LPBYTE)mFileView) + offset;
- }
- void BinFile::seekMod(int64 mod) {
- LARGE_INTEGER modPos;
- modPos.QuadPart = mod;
- SetFilePointerEx(mFile, modPos, &modPos, SEEK_CUR);
- }
- void BinFile::seek(uint64 pos) {
- LARGE_INTEGER modPos;
- modPos.QuadPart = pos;
- SetFilePointerEx(mFile, modPos, &modPos, SEEK_SET);
- }
- uint64 BinFile::tell() {
- LARGE_INTEGER modPos;
- modPos.QuadPart = 0;
- SetFilePointerEx(mFile, modPos, &modPos, SEEK_CUR);
- return modPos.QuadPart;
- }
- void BinFile::read(void* memory, uint64 numBytes) {
- DWORD numRead = 0;
- ReadFile(mFile, memory, (uint32)numBytes, &numRead, nullptr);
- }
- std::wstring BinFile::readString() {
- std::vector<char> strBytes;
- char c = read<char>();
- do {
- strBytes.push_back(c);
- c = read<char>();
- } while(c != '\0');
- std::vector<wchar_t> uni(strBytes.size());
- MultiByteToWideChar(CP_UTF8, 0, strBytes.data(), (uint32)strBytes.size(), uni.data(), (uint32)uni.size());
- return uni.data();
- }
Advertisement
Add Comment
Please, Sign In to add comment