file_size.cpp 648 B

123456789101112131415161718192021222324
  1. //
  2. // $Id$
  3. //
  4. #include<__vic/fs.h>
  5. #include<__vic/windows/wchar.h>
  6. #include<__vic/windows/throw_last_error.h>
  7. #include<windows.h>
  8. namespace __vic {
  9. //----------------------------------------------------------------------------
  10. uintmax_t file_size(const char *path)
  11. {
  12. using windows::utf8to16;
  13. WIN32_FILE_ATTRIBUTE_DATA attr;
  14. if(!::GetFileAttributesExW(utf8to16(path), GetFileExInfoStandard, &attr))
  15. windows::throw_last_error("GetFileAttributesEx");
  16. return (uint64_t(attr.nFileSizeHigh) << sizeof(DWORD)) | attr.nFileSizeLow;
  17. }
  18. //----------------------------------------------------------------------------
  19. } // namespace