gpt4 book ai didi

windows - NTFS 文件系统时间

转载 作者:可可西里 更新时间:2023-11-01 14:14:09 27 4
gpt4 key购买 nike

我在 windows xp 上测试过这个。

如果我这样做

  1. 创建一个文件。
  2. 写入文件。
  3. 关闭文件。(然后,文件的 LastWriteTime 被更改)

但如果我这样做

  1. 创建一个文件。
  2. 设置文件的 LastFileTime。
  3. 通过调用 GetFileTime 检查时间(然后,文件的 LastWriteTime 被更改)
  4. 睡 20 秒。
  5. 写入文件。
  6. 睡 20 秒。
  7. 关闭文件。
  8. 通过调用 GetFileTime 检查时间(从未应用进程 5 的时间。为什么?)

编辑:

wstring fileName = L"D:\\testfile.txt";
HANDLE h = CreateFileW(fileName.c_str(), GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
CREATE_ALWAYS,
0, 0);

FILETIME ft1, ft2, ft3;
if(!GetFileTime(h, &ft1, &ft2, &ft3))
{
return;
}
std::cout << ft3.dwHighDateTime << std::endl << ft3.dwLowDateTime << std::endl;
ft1.dwLowDateTime = 1000000;

if(!SetFileTime(h, &ft1, &ft1, &ft1))
{
return;
}

if(!GetFileTime(h, &ft1, &ft2, &ft3))
{
return;
}
std::cout << ft3.dwHighDateTime << std::endl << ft3.dwLowDateTime << std::endl;

Sleep(5000);
TCHAR buffer[] = L"Test1234567890 Test1234567890 Test1234567890 Test1234567890 Test1234567890\r\n";
DWORD writeBytes = 0;
BOOL fOk = WriteFile(h, buffer, sizeof(buffer), &writeBytes, 0);
if(!fOk)
{
return;
}
if(writeBytes != sizeof(buffer))
{
return;
}

if(!GetFileTime(h, &ft1, &ft2, &ft3))
{
return;
}
std::cout << ft3.dwHighDateTime << std::endl << ft3.dwLowDateTime << std::endl;

CloseHandle(h);

h = CreateFileW(fileName.c_str(), GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
0, 0);
if(!GetFileTime(h, &ft1, &ft2, &ft3))
{
return;
}
std::cout << ft3.dwHighDateTime << std::endl << ft3.dwLowDateTime << std::endl;

CloseHandle(h);
DeleteFile(fileName.c_str());

你能解释一下吗?谢谢。

最佳答案

尝试在更改时间戳后调用 FlushFileBuffers(h) 或在打开文件期间使用 FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING 标志。参见 http://msdn.microsoft.com/en-us/library/aa363858.aspx#caching_behavior :

A write-through request via FILE_FLAG_WRITE_THROUGH also causes NTFS to flush any metadata changes, such as a time stamp update or a rename operation, that result from processing the request. For this reason, the FILE_FLAG_WRITE_THROUGH flag is often used with the FILE_FLAG_NO_BUFFERING flag as a replacement for calling the FlushFileBuffers function after each write, which can cause unnecessary performance penalties. Using these flags together avoids those penalties. For general information about the caching of files and metadata, see File Caching.

关于windows - NTFS 文件系统时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com