On 2/15/18 6:56 AM, Andre Pany wrote:
Hi,
I just noticed that std.zip will throw an exception if the source files
exceeds 2 GB.
I am not sure whether this is a limitation of zip version 20 or a bug.
On wikipedia a
size limit of 4 GB is mentioned. Should I open an issue?
Windows 10 with x86_64 architecture.
core.exception.RangeError@std\zip.d(808): Range violation
----------------
0x00007FF7C9B1705C in d_arrayboundsp
0x00007FF7C9B301FF in @safe void std.zip.ZipArchive.putUshort(int, ushort)
0x00007FF7C9B2E634 in void[] std.zip.ZipArchive.build()
void zipFolder(string archiveFilePath, string folderPath)
{
import std.zip, std.file;
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(); // zip.build() will throw
write(archiveFilePath, compressed_data);
}
Kind regards
André
I think it's inherent in the zlib API. I haven't used all of the
library, but the portion I did use (using zstream) uses uint for buffer
sizes.
-Steve