D - help with std.zip
- Ant (11/11) Mar 15 2004 How to add new members to an existing ZipArchive?
- Matthew (5/16) Mar 16 2004 I was just trying to use it myself, but because I'm in a rush I've resor...
- =?ISO-8859-1?Q?Julio_Jim=E9nez?= (10/26) Mar 16 2004 I think you can't in that way.
- =?ISO-8859-1?Q?Julio_Jim=E9nez?= (73/91) Mar 16 2004 Sorry... yes... you can
- Ant (4/17) Mar 16 2004 I think you're right.
How to add new members to an existing ZipArchive? I just read the file, create the ZipArchive instance from the file add the new member build the archive and write it back to a file All the previous members became 0 length (can be listed but unzip does not create any files) Am I missing something? any idea? thanks. Ant
Mar 15 2004
I was just trying to use it myself, but because I'm in a rush I've resorted to using Ruby. Anyone have a couple of simple std.zlib samples they would like to post? "Ant" <duitoolkit yahoo.ca> wrote in message news:pan.2004.03.16.03.12.06.886848 yahoo.ca...How to add new members to an existing ZipArchive? I just read the file, create the ZipArchive instance from the file add the new member build the archive and write it back to a file All the previous members became 0 length (can be listed but unzip does not create any files) Am I missing something? any idea? thanks. Ant
Mar 16 2004
Ant wrote:How to add new members to an existing ZipArchive? I just read the file, create the ZipArchive instance from the file add the new member build the archive and write it back to a file All the previous members became 0 length (can be listed but unzip does not create any files) Am I missing something? any idea? thanks. AntI think you can't in that way. You must create a ZipArchive object with the zip file you want to open... then can get the ArchiveMember from directory member, defined: (ArchiveMember[char[]] directory;) Create a New ZipArchive object and add this ArchiveMember plus the files you want... then delete de old zip file and rename the new one created But I think there is something wrong in std.zip module regards Julio
Mar 16 2004
Julio Jiménez wrote:Ant wrote:I think you can't in that way. You must create a ZipArchive object with the zip file you want to open... then can get the ArchiveMember from directory member, defined: (ArchiveMember[char[]] directory;) Create a New ZipArchive object and add this ArchiveMember plus the files you want... then delete de old zip file and rename the new one created But I think there is something wrong in std.zip module regards JulioSorry... yes... you can a little example: // Program for testing zlib // Modified to append a file to a existing zipfile... import std.file; import std.date; import std.zip; import std.zlib; int main(char[][] args) { byte[] buffer; std.zip.ZipArchive zr; char[] zipname; ubyte[] data; testzlib(); if (args.length > 1) zipname = args[1]; else zipname = "test.zip"; buffer = cast(byte[])std.file.read(zipname); zr = new std.zip.ZipArchive(cast(void[])buffer); printf("comment = '%.*s'\n", zr.comment); //zr.print(); foreach (ArchiveMember de; zr.directory) { printf("date = '%.*s'\n", std.date.toString(std.date.toDtime(de.time))); //data = zr.expand(de); } printf("**Success**\n"); ArchiveMember am = new ArchiveMember(); am.compressionMethod = 8; am.name = "foo2.bar"; // name for your new archive to append am.time = toDosFileTime(getUTCtime()); //am.extra = cast(ubyte[])"ExTrA"; am.expandedData = cast(ubyte[])"We all live in a yellow submarine, a yellow submarine"; am.expandedSize = am.expandedData.length; zr.addMember(am); void[] data2 = zr.build(); // build new zip file std.file.write(zipname, cast(byte[])data2); // overwrite the old file with new data return 0; } void arrayPrint(ubyte[] array) { //printf("array %p,%d\n", (void*)array, array.length); for (int i = 0; i < array.length; i++) { printf("%02x ", array[i]); if (((i + 1) & 15) == 0) printf("\n"); } printf("\n\n"); } void testzlib() { ubyte[] src = cast(ubyte[]) "the quick brown fox jumps over the lazy dog\r the quick brown fox jumps over the lazy dog\r "; ubyte[] dst; arrayPrint(src); dst = cast(ubyte[])std.zlib.compress(cast(void[])src); arrayPrint(dst); src = cast(ubyte[])std.zlib.uncompress(cast(void[])dst); arrayPrint(src); } but it create a corrupted zip file.... try to test it, its a begining... :-) i only had 5 minutes to test... later Julio
Mar 16 2004
On Tue, 16 Mar 2004 11:52:30 +0100, Julio Jiménez wrote:Julio Jiménez wrote:I think you're right. Anyone has experience witht the zip module? AntAnt wrote:I think you can't in that way. You must create a ZipArchive object with the zip file you want to open... then can get the ArchiveMember from directory member, defined: (ArchiveMember[char[]] directory;) Create a New ZipArchive object and add this ArchiveMember plus the files you want... then delete de old zip file and rename the new one created But I think there is something wrong in std.zip module
Mar 16 2004