我在Windows XP上测试了这个。NTFS文件系统时间
如果我做
- 创建一个文件。
- 写入文件。
- 关闭文件。(然后,该文件的LastWriteTime改变)
但如果我这样做
- 创建一个文件。
- 设置文件的LastFileTime。
- 通过调用GetFileTime来检查时间(然后,文件的LastWriteTime被更改)
- 睡眠20秒。
- 写入文件。
- 睡眠20秒。
- 关闭文件。
- 检查通过调用GetFileTime的时间(process5的时间永远不会应用,为什么呢?)
编辑:
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());
你能解释我这件事吗? 谢谢。
它通过使用本机WinAPI而不是.NET进行测试。 没有缓存。 – Benjamin 2010-08-04 04:06:28
“没有缓存。”对于没有发布代码的人来说,这是一个非常大胆的断言,具有他无法解释的神秘行为,并且正在使用具有斑点行为文档的文件系统:http://msdn.microsoft.com/en-us/library /ms724290%28v=VS.85%29.aspx – msw 2010-08-04 06:20:37
对于我粗鲁的评论,我很抱歉。我不是故意的。我的英语说得不好。我编辑了我的问题。感谢msw。 – Benjamin 2010-08-04 07:22:50