diff --git a/include/ghc/filesystem.hpp b/include/ghc/filesystem.hpp index 25f270e..eb01524 100644 --- a/include/ghc/filesystem.hpp +++ b/include/ghc/filesystem.hpp @@ -805,7 +805,10 @@ class GHC_FS_API_CLASS directory_entry { public: // [fs.dir.entry.cons] constructors and destructor - directory_entry() noexcept = default; + directory_entry() noexcept + : _last_write_time((file_time_type::min)()) + { + } directory_entry(const directory_entry&) = default; directory_entry(directory_entry&&) noexcept = default; #ifdef GHC_WITH_EXCEPTIONS @@ -4687,7 +4690,7 @@ GHC_INLINE void last_write_time(const path& p, file_time_type new_time, std::err #ifdef GHC_OS_WINDOWS detail::unique_handle file(::CreateFileW(GHC_NATIVEWP(p), FILE_WRITE_ATTRIBUTES, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL)); FILETIME ft; - auto tt = std::chrono::duration_cast(d).count() * 10 + 116444736000000000; + const auto tt = std::chrono::duration_cast>>(d).count() + 116444736000000000LL; ft.dwLowDateTime = static_cast(tt); ft.dwHighDateTime = static_cast(tt >> 32); if (!::SetFileTime(file.get(), 0, 0, &ft)) { diff --git a/test/filesystem_test.cpp b/test/filesystem_test.cpp index 8244d37..9c89277 100644 --- a/test/filesystem_test.cpp +++ b/test/filesystem_test.cpp @@ -2574,9 +2574,9 @@ TEST_CASE("fs.op.last_write_time - last_write_time", "[filesystem][operations][f const auto preciseTime = nt + std::chrono::milliseconds(123); CHECK_NOTHROW(fs::last_write_time("foo", preciseTime, ec)); REQUIRE(!ec); - CHECK(fs::last_write_time("foo") == preciseTime); + CHECK(std::abs(std::chrono::duration_cast(fs::last_write_time("foo") - preciseTime).count()) < 1000000); const fs::directory_entry preciseEntry("foo"); - CHECK(preciseEntry.last_write_time() == preciseTime); + CHECK(std::abs(std::chrono::duration_cast(preciseEntry.last_write_time() - preciseTime).count()) < 1000000); if (is_symlink_creation_supported()) { #if !defined(GHC_OS_WINDOWS) && !defined(GHC_OS_WEB) struct ::stat linkStatBefore;