加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – NTFS文件系统时间

发布时间:2020-12-14 05:29:34 所属栏目:Windows 来源:网络整理
导读:我在 windows xp上测试了这个. 如果我做 创建一个文件. 写入文件. 关闭文件.(然后,文件的LastWriteTime被更改) 但如果我这样做 创建一个文件. 设置文件的LastFileTime. 通过调用GetFileTime检查时间(然后,文件的LastWriteTime被更改) 睡20秒. 写入文件. 睡20
我在 windows xp上测试了这个.

如果我做

>创建一个文件.
>写入文件.
>关闭文件.(然后,文件的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,CREATE_ALWAYS,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))
{
    return;
}

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

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

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

CloseHandle(h);

h = CreateFileW(fileName.c_str(),OPEN_EXISTING,0);
if(!GetFileTime(h,&ft3))
{
    return;
}
std::cout << ft3.dwHighDateTime << std::endl << ft3.dwLowDateTime << std::endl;

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

你能解释一下这个吗?
谢谢.

解决方法

尝试在更改时间戳后调用FlushFileBuffers(h),或在打开文件期间使用FILE_FLAG_WRITE_THROUGH和FILE_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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读