如何仅映射文件的首字母??
我已经尝试过将这些值用作参数:
1, // maximum object size (high-order DWORD)
1, // maximum object size (low-order DWORD)
(我不知道它们之间的区别)。
1是仅1个字母映射的正确参数吗?
#define FILENAME "c:\gibrish.bin"
#include <Windows.h>
#include <stdio.h>
int main()
{
HANDLE hFile;
LPCSTR pFileName = FILENAME;
hFile = CreateFileA(pFileName, // file name
FILE_MAP_ALL_ACCESS, // access type
0, // other processes can't share
NULL, // security
OPEN_EXISTING, // open only if file exists
FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hMapFile;
////////mapping here
hMapFile = CreateFileMappingA(hFile, // file handle
NULL, // default security
FILE_MAP_ALL_ACCESS, // read access
1, // maximum object size (high-order DWORD)
1, // maximum object size (low-order DWORD)
// 0 means map the whole file
"gibrishFile"); // name of mapping object, in case we
// want to share it
return 0;
}
答案 0 :(得分:0)
如何仅映射文件的首字母? 我已经尝试过将这些值用作参数:
1, // maximum object size (high-order DWORD) 1, // maximum object size (low-order DWORD)
这两个参数构成一个(巨大的)数字,如果您要给出的数字是1或2 ^ 32以下的任何其他数字,则high-order DWORD
必须为0。如果您给出1和1,则表示数字为1 *(2 ^ 32)+1 = 4294967296,仅与第一个字母不兼容
来自https://docs.microsoft.com/en-us/windows/desktop/winprog/windows-data-types:
DWORD 32位无符号整数。范围是0到4294967295十进制。
答案 1 :(得分:0)
FILE_MAP_ALL_ACCESS
msdn doc中没有参数CreateFileMappingA
。返回值将始终失败,其中GetLastError()
返回87(ERROR_INVALID_PARAMETER
)。并且您正在访问的文件夹是“ C:\\
”,如果您没有足够的权限,CreateFileA
将返回一个INVALID_HANDLE_VALUE
并得到错误5(ERROR_ACCESS_DENIED
)
CreateFileMappingA
用于创建映射空间,而不是要映射的实际大小。然后使用MapViewOfFile()
映射到调用进程的地址空间。并且您要映射的尺寸必须<=您创建的尺寸。