读书人

!WriteFile函数很久才返回

发布时间: 2012-06-03 16:59:40 作者: rapoo

求助!WriteFile函数很久才返回
我需要建立一个4G的文件,然后慢慢向其中写入数据。这里我是用的是SetFilePointerEx和SetEndOfFile实现的。4G文件创建成功,但是当我把文件指针移动到文件结尾向前8字节的地方,写入8字节数据的时候,WriteFile函数很久才返回。通过Process Monitor我发现,这个函数是等到文件系统把从文件开头64K到文件结尾前8字节的地方填充满了才会返回。

请问我该如何避免这种填充呢?(CreateFile设置non-buffering方式、DeviceIoControl函数也试过,都不能避免这一情况)

以下是代码

C/C++ code
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;


[解决办法]
DeviceIoControl 设置 FSCTL_SET_SPARSE

另外,你需要判断,你的文件系统是否支持稀疏文件 GetVolumeInformation

读书人网 >C语言

热点推荐