为什么我不能更改新创建文件的 'last write time'?
Why can't I change the 'last write time' of my newly created files?
首先,我使用 Visual Studio 2015 年基于 Boost::Filesystem.
即将推出的 C++17 标准实现的文件系统库
基本上,我要做的是保存文件的时间戳(它是 "last write time"),将该文件的内容连同所述时间戳一起复制到存档中,然后将该文件提取出来并使用保存的恢复正确 "last write time".
的时间戳
// Get the file's 'last write time' and convert it into a usable integer.
__int64 timestamp = chrono::time_point_cast<chrono::seconds>(fs::last_write_time(src)).time_since_epoch().count();
// ... (do a bunch of stuff in here)
// Save the file
ofstream destfile(dest, ios::binary | ios::trunc);
destfile.write(ptr, size);
// Correct the file's 'last write time'
fs::last_write_time(dest, chrono::time_point<chrono::system_clock>(chrono::seconds(timestamp)));
问题是新文件的结尾时间戳总是等于它的创建时间(现在),因为我根本没有调用过 last_write_time()
。
当我尝试将时间戳从一个现有文件复制到另一个文件时,效果很好。当我从文件复制时间戳,然后使用 fs::copy
创建该文件的新副本,然后立即更改副本的时间戳时,它也可以正常工作。以下代码可以正常工作:
// Get the file's 'last write time' and convert it into a usable integer.
__int64 timestamp = chrono::time_point_cast<chrono::seconds>(fs::last_write_time("test.txt")).time_since_epoch().count();
fs::copy("test.txt", "new.txt");
// Correct the file's 'last write time'
fs::last_write_time("new.txt", chrono::time_point<chrono::system_clock>(chrono::seconds(timestamp)));
我没有理由怀疑存储时间戳可能不正确,但我没有其他想法。可能是什么原因造成的?
发生这种情况是因为您写入流但在实际更新时间之前没有关闭文件。时间将在关闭时再次更新。
解决方法是关闭流,然后更新文件时间。
首先,我使用 Visual Studio 2015 年基于 Boost::Filesystem.
即将推出的 C++17 标准实现的文件系统库基本上,我要做的是保存文件的时间戳(它是 "last write time"),将该文件的内容连同所述时间戳一起复制到存档中,然后将该文件提取出来并使用保存的恢复正确 "last write time".
的时间戳// Get the file's 'last write time' and convert it into a usable integer.
__int64 timestamp = chrono::time_point_cast<chrono::seconds>(fs::last_write_time(src)).time_since_epoch().count();
// ... (do a bunch of stuff in here)
// Save the file
ofstream destfile(dest, ios::binary | ios::trunc);
destfile.write(ptr, size);
// Correct the file's 'last write time'
fs::last_write_time(dest, chrono::time_point<chrono::system_clock>(chrono::seconds(timestamp)));
问题是新文件的结尾时间戳总是等于它的创建时间(现在),因为我根本没有调用过 last_write_time()
。
当我尝试将时间戳从一个现有文件复制到另一个文件时,效果很好。当我从文件复制时间戳,然后使用 fs::copy
创建该文件的新副本,然后立即更改副本的时间戳时,它也可以正常工作。以下代码可以正常工作:
// Get the file's 'last write time' and convert it into a usable integer.
__int64 timestamp = chrono::time_point_cast<chrono::seconds>(fs::last_write_time("test.txt")).time_since_epoch().count();
fs::copy("test.txt", "new.txt");
// Correct the file's 'last write time'
fs::last_write_time("new.txt", chrono::time_point<chrono::system_clock>(chrono::seconds(timestamp)));
我没有理由怀疑存储时间戳可能不正确,但我没有其他想法。可能是什么原因造成的?
发生这种情况是因为您写入流但在实际更新时间之前没有关闭文件。时间将在关闭时再次更新。
解决方法是关闭流,然后更新文件时间。