从网上看说内存映射文件的大小在运行期是不能被更改的,是否是这样? 
如果我想增加映射文件的内容时,就要在创建的时候创建一个足够大的内存对象,这样如果我用不了这么多空间,保存的文件后面是不是会有一大堆空白的地方? 
请大侠指教 

解决方案 »

  1.   

    是有空白没错 很多人初始化的时候都memset(...,0)的
      

  2.   

    我以前用过内存映射文件,运行时确定是没办法改变大小, 不过在你确定的文件的实际大小后,可以利用BOOL SetEndOfFile( HANDLE hFile )改变物理文件大小.
      

  3.   

    谢谢各位,我把一段代码贴上来,是DELPHI的,加了注释
    procedure TForm1.btnCreateClick(Sender: TObject);
    var
      PText, Ps: PChar;
      ErrorID: DWord;
      strSource: string;
    begin
      // 文件句柄
      fHandle := CreateFile(PChar('c:\response.txt'), GENERIC_READ or GENERIC_WRITE,
                          FILE_SHARE_READ, nil, OPEN_EXISTING,
                          FILE_FLAG_SEQUENTIAL_SCAN, 0);
      // 用fHandle创建内存映射对象,大小为500字节
      MapViewHandle := CreateFileMapping(fHandle, 0, PAGE_READWRITE, 0, 500, 'MapViewTest');
      // 获取映射对象的指针地址
      PText := MapViewOfFile(MapViewHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
      // 给字符串变量赋值
      strSource := '123fjfjsoijdfoiejflkdsjflsjdfoiejwoijfsjdfljd';
      // 将字符串内容复制到映射对象中
      StrCopy(PText, PChar(strSource));
      // 关闭映射对象和文件句柄
      CloseHandle(MapViewHandle);
      CloseHandle(fHandle);
    end;这个过程对txt文件进行了修改,文本文件的内容为'123fjfjsoijdfoiejflkdsjflsjdfoiejwoijfsjdfljd'后面由很多个空格,就是把500个字符填充满了
      

  4.   

    用二进制编辑软件打开TXT看看,后面不一定就是SPACE