求助!WriteFile函数很久才返回
我需要建立一个4G的文件,然后慢慢向其中写入数据。这里我是用的是SetFilePointerEx和SetEndOfFile实现的。4G文件创建成功,但是当我把文件指针移动到文件结尾向前8字节的地方,写入8字节数据的时候,WriteFile函数很久才返回。通过Process Monitor我发现,这个函数是等到文件系统把从文件开头64K到文件结尾前8字节的地方填充满了才会返回。
请问我该如何避免这种填充呢?(CreateFile设置non-buffering方式、DeviceIoControl函数也试过,都不能避免这一情况)
以下是代码
HANDLE hFile = CreateFile(_T(".\\test.temp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { printf("CreateFile failed : error %d\n", GetLastError()); return -1; } LARGE_INTEGER liFileSize; liFileSize.HighPart = 1; liFileSize.LowPart = 0; SetFilePointerEx(hFile, liFileSize, NULL, FILE_BEGIN); SetEndOfFile(hFile); SetFilePointer(hFile, -8, NULL, FILE_END); //在结尾处写入8字节:这里的写操作会填补空洞 LARGE_INTEGER liAnyLi; DWORD dwBytesWrite = 0; WriteFile(hFile, &liAnyLi, sizeof(LARGE_INTEGER), &dwBytesWrite, NULL); CloseHandle(hFile); return 0;