仅映射文件C的第一个字母

时间:2019-01-24 16:26:02

标签: c file dictionary winapi mapping

如何仅映射文件的首字母??
我已经尝试过将这些值用作参数:

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;
}

2 个答案:

答案 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()映射到调用进程的地址空间。并且您要映射的尺寸必须<=您创建的尺寸。