std.zip and a large archive
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jul 19 03:46:29 PDT 2014
On Saturday, 19 July 2014 at 07:55:10 UTC, AntonSotov wrote:
> I process archive:
> ///////////////
> import std.stdio, std.zip, std.file;
>
> int main()
> {
> auto zip = new ZipArchive(read("c:/test.zip"));
> foreach (item; zip.directory) {
> writeln("processing ", item.name, " ...");
> // processing item...
> }
> return 0;
> }
> /////////////////
> it works well for normal archives.
> but how to process zip archive ~1GB ?
> it takes a long of RAM.
Hmm... it's unfortunate that ZipArchive doesn't take a file
descriptor. As a workaround, you can use memory mapping:
import std.stdio, std.zip, std.file, std.mmfile;
int main()
{
auto mmfile = new MmFile(File("c:/test.zip", "rb"));
auto zip = new ZipArchive(mmfile[]);
foreach (item; zip.directory) {
writeln("processing ", item.name, " ...");
// processing item...
}
return 0;
}
More information about the Digitalmars-d-learn
mailing list