dwFileOffsetHigh 和 dwFileOffsetLow 解释道
dwFileOffsetHigh and dwFileOffsetLow explained
我正在尝试将文件写入磁盘,但是当我尝试写入大于 4 GB 的文件时它崩溃了。我目前正在使用通话:
fileMap= CreateFileMapping( fileHandle, NULL, PAGE_READWRITE, 0, (DWORD)size, NULL );
我认为这就是问题所在。阅读文档,它说我可以使用 dwMaximumSizeHigh 和 dwMaximumSizeLow 通过此调用保存 64 位大小的文件。我有点困惑这些是如何工作的?
此 CreateFileMapping 以"磁盘空间不足"错误结尾,说明"dwFileOffsetHigh 和 dwFileOffsetLow 是两个 32 位值,组合形成一个 64 位值。
那么如何将一个值传递给这个函数,为 64 位文件创建一个足够大的文件映射呢?我尝试为最小和最大传递两个 (DWORD) 大小,但它仍然崩溃。我将如何使用此功能创建大于 32 位大小的文件?
从 64 位整数中提取 32 位部分的最简单、最清晰的方法可能是使用 MSDN 上所示的LARGE_INTEGER
或ULARGE_INTEGER
:
ULARGE_INTEGER maxSize;
maxSize.QuadPart = size; /* your 64-bit value here */
fileMap = CreateFileMapping(fileHandle, NULL, PAGE_READWRITE,
maxSize.HighPart, maxSize.LowPart, NULL);
像这样提取低部分和高部分:
uint64_t size = ...;
uint32_t sizeLow = size & 0xffffffff;
uint32_t sizeHigh = size >> 32;
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?