| 242 | // Open the file |
| 243 | |
| 244 | bool DiskFile::Open(const std::string &_filename, u64 _filesize) |
| 245 | { |
| 246 | assert(hFile == INVALID_HANDLE_VALUE); |
| 247 | |
| 248 | filename = _filename; |
| 249 | filesize = _filesize; |
| 250 | |
| 251 | std::wstring wfilename = utf8::Utf8ToWide(_filename); |
| 252 | hFile = ::CreateFileW(wfilename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); |
| 253 | if (hFile == INVALID_HANDLE_VALUE) |
| 254 | { |
| 255 | DWORD error = ::GetLastError(); |
| 256 | |
| 257 | switch (error) |
| 258 | { |
| 259 | case ERROR_FILE_NOT_FOUND: |
| 260 | case ERROR_PATH_NOT_FOUND: |
| 261 | break; |
| 262 | default: |
| 263 | #pragma omp critical |
| 264 | *serr << "Could not open \"" << _filename << "\": " << ErrorMessage(error) << std::endl; |
| 265 | } |
| 266 | |
| 267 | return false; |
| 268 | } |
| 269 | |
| 270 | offset = 0; |
| 271 | exists = true; |
| 272 | |
| 273 | return true; |
| 274 | } |
| 275 | |
| 276 | // Read some data from disk |
| 277 | |