file_size.cpp 780 B

12345678910111213141516171819202122232425262728
  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 wchar_t *path)
  11. {
  12. WIN32_FILE_ATTRIBUTE_DATA attr;
  13. if(!::GetFileAttributesExW(path, GetFileExInfoStandard, &attr))
  14. windows::throw_last_error("GetFileAttributesEx");
  15. return (uint64_t(attr.nFileSizeHigh) << sizeof(DWORD)) | attr.nFileSizeLow;
  16. }
  17. //----------------------------------------------------------------------------
  18. uintmax_t file_size(const char *path)
  19. {
  20. return file_size(windows::utf8to16(path));
  21. }
  22. //----------------------------------------------------------------------------
  23. } // namespace