dwFileOffsetHigh 和 dwFileOffsetLow 解释
dwFileOffsetHigh and dwFileOffsetLow explained
我正在尝试将文件写入磁盘,但当我尝试写入大于 4 GB 的文件时它崩溃了。我目前正在使用电话:
fileMap= CreateFileMapping( fileHandle, NULL, PAGE_READWRITE, 0, (DWORD)size, NULL );
我认为这就是问题所在。阅读文档它说我可以使用 dwMaximumSizeHigh 和 dwMaximumSizeLow 通过此调用保存 64 位大小的文件。我有点困惑这些是如何工作的?
这 CreateFileMapping ends with "Not enough disk space" error 说明 "dwFileOffsetHigh and dwFileOffsetLow are two 32 bit values that are combined to form a single 64 bit value. "
那么我如何将一个值传递给这个函数,以便为 64 位文件创建足够大的文件映射?我尝试为最小值和最大值传递两个 (DWORD) 大小,但它仍然崩溃。我将如何使用此函数创建大于 32 位大小的文件?
像这样提取低和高部分:
uint64_t size = ...;
uint32_t sizeLow = size & 0xffffffff;
uint32_t sizeHigh = size >> 32;
从 64 位整数中提取 32 位部分的最简单明了的方法可能是使用 LARGE_INTEGER
or ULARGE_INTEGER
as shown on MSDN:
ULARGE_INTEGER maxSize;
maxSize.QuadPart = size; /* your 64-bit value here */
fileMap = CreateFileMapping(fileHandle, NULL, PAGE_READWRITE,
maxSize.HighPart, maxSize.LowPart, NULL);
我正在尝试将文件写入磁盘,但当我尝试写入大于 4 GB 的文件时它崩溃了。我目前正在使用电话:
fileMap= CreateFileMapping( fileHandle, NULL, PAGE_READWRITE, 0, (DWORD)size, NULL );
我认为这就是问题所在。阅读文档它说我可以使用 dwMaximumSizeHigh 和 dwMaximumSizeLow 通过此调用保存 64 位大小的文件。我有点困惑这些是如何工作的?
这 CreateFileMapping ends with "Not enough disk space" error 说明 "dwFileOffsetHigh and dwFileOffsetLow are two 32 bit values that are combined to form a single 64 bit value. "
那么我如何将一个值传递给这个函数,以便为 64 位文件创建足够大的文件映射?我尝试为最小值和最大值传递两个 (DWORD) 大小,但它仍然崩溃。我将如何使用此函数创建大于 32 位大小的文件?
像这样提取低和高部分:
uint64_t size = ...;
uint32_t sizeLow = size & 0xffffffff;
uint32_t sizeHigh = size >> 32;
从 64 位整数中提取 32 位部分的最简单明了的方法可能是使用 LARGE_INTEGER
or ULARGE_INTEGER
as shown on MSDN:
ULARGE_INTEGER maxSize;
maxSize.QuadPart = size; /* your 64-bit value here */
fileMap = CreateFileMapping(fileHandle, NULL, PAGE_READWRITE,
maxSize.HighPart, maxSize.LowPart, NULL);