如果我做
>创建一个文件.@H_403_12@>写入文件.@H_403_12@>关闭文件.(然后,文件的LastWriteTime被更改)
但如果我这样做
>创建一个文件.@H_403_12@>设置文件的LastFileTime.@H_403_12@>通过调用GetFileTime检查时间(然后,文件的LastWriteTime被更改)@H_403_12@>睡20秒.@H_403_12@>写入文件.@H_403_12@>睡20秒.@H_403_12@>关闭文件.@H_403_12@>通过调用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 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,&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());
你能解释一下这个吗?@H_403_12@谢谢.
解决方法
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.