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@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.