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

Andre Pany andre at s-e-a-p.de
Fri Jan 26 12:16:09 UTC 2018


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é




More information about the Digitalmars-d-learn mailing list