在写入文件之前保留磁盘空间以提高效率

hag*_*gag 15 windows

当我第一次启用日志记录时,我注意到我的一个项目中出现了巨大的性能损失.但是当达到日志文件限制并且程序再次开始写入文件的开头时,日志记录速度要快得多(大约快50%).将日志文件大小设置为数百MB是正常的.

大多数下载管理器在开始下载文件之前分配具有所需大小的虚拟文件.这使得写入更有效,因为整个块一次分配.

当我的程序第一次启动时,以某种固定大小有效保留磁盘空间的最佳方法是什么?

pli*_*nth 8

void ReserveSpace(LONG spaceLow, LONG spaceHigh, HANDLE hFile)
{
    DWORD err = ::SetFilePointer(hFile, spaceLow, &spaceHigh, FILE_BEGIN);

    if (err == INVALID_SET_FILE_POINTER) {
        err = GetLastError();
        // handle error
    }
    if (!::SetEndOfFile(hFile)) {
        err = GetLastError();
        // handle error
    }
    err = ::SetFilePointer(hFile, 0, 0, FILE_BEGIN); // reset
}
Run Code Online (Sandbox Code Playgroud)