MapViewOfFileEx: Not enough storage is available to process this command.

rikki cattermole rikki at cattermole.co.nz
Fri Jan 26 12:19:10 UTC 2018


On 26/01/2018 12:16 PM, Andre Pany wrote:
> Hi,
> 
> in my application I create a zip archive with a size of ~ 400 MB and 
> after that I read the archive. While trying to read the archive, there 
> is an error:
> 
> std.windows.syserror.WindowsException at std\mmfile.d(267): 
> MapViewOfFileEx: Not enough storage is available to process this 
> command. (error 8)
> 
> 0x0045B2AE in @safe void* std.windows.syserror.wenforce!(void*, 
> immutable(char)[]).wenforce(void*, lazy immutable(char)[], 
> immutable(char)[], uint)
> 0x0044F4D8 in std.mmfile.MmFile std.mmfile.MmFile.__ctor(immutable(char)[])
> 
>  From the source code I cannot see any issue. Do you have an idea what 
> the issue
> is causing?
> 
> void zipFolder(string archiveFilePath, string folderPath)
> {
>      import std.zip, std.file;
>      import std.exception: enforce;
>      import std.path: baseName;
> 
>      enforce(exists(folderPath) && isDir(folderPath));
> 
>      ZipArchive zip = new ZipArchive();
>      string folderName = folderPath.baseName;
> 
>      foreach(entry; dirEntries(folderPath, SpanMode.depth))
>      {
>          if (!entry.isFile)
>              continue;
> 
>          ArchiveMember am = new ArchiveMember();
>          am.name = entry.name[folderPath.length + 1..$];
>          am.expandedData(cast(ubyte[]) read(entry.name));
>          zip.addMember(am);
>      }
> 
>      void[] compressed_data = zip.build();
>      write(archiveFilePath, compressed_data);
> }
> 
> string[] listZipContent(string archiveFilePath)
> {
>      import std.zip, std.file, std.mmfile;
>      auto mmfile = new MmFile(archiveFilePath); // <-- causing the issue
>      auto zip = new ZipArchive(mmfile[]);
>      string[] results;
>      foreach (name, am; zip.directory)
>          results ~= name;
>      return results;
> }
> 
> Kind regards
> André

Could be heap fragmentation to who knows what else assuming of course 
this is 32bit right? If so, 64bit is the answer.


More information about the Digitalmars-d-learn mailing list