Home > Enterprise >  Issue using Dotnetzip in powershell error consider setting UseZip64WhenSaving
Issue using Dotnetzip in powershell error consider setting UseZip64WhenSaving

Time:04-13

I have used dotnetzip in c# with large files with no problem. I have a requirement to zip up some large files in the power shell. I see from dotnetzip docs I can use it iN ps . But I keep getting the error Compressed or Uncompressed size, or offset exceeds the maximum value. Consider setting the UseZip64WhenSaving property on the ZipFile instance. this is my PS code. How do I set the UseZip64WhenSaving in PS?

[System.Reflection.Assembly]::LoadFrom("D:\\mybigfiles\\Ionic.Zip.dll");
$directoryToZip = "D:\\mybigfiles\\";
$zipfile =  new-object Ionic.Zip.ZipFile;
#$zipfile.UseZip64WhenSaving;
$e= $zipfile.AddEntry("mybig.csv", "This is a zipfile created from within powershell.")
$e= $zipfile.AddDirectory($directoryToZip, "home")
$zipfile.Save("D:\\mybigfiles\\big.zip");
$zipfile.Dispose();

Working C# code.

            using (ZipFile zip = new ZipFile())
            {
                zip.UseZip64WhenSaving = Zip64Option.AsNecessary;
                zip.AddFile(compressedFileName);
                zip.AddFile("\\\\server\\bigfile\\CM_Report_20220411200326.csv");
                zip.AddFile("\\\\server\\bigfile\\PM_Report_20220411200326.csv");
                zip.AddFile("\\\\server\\bigfile\\SCE_Report_20220411200326.csv");
                
            }```

CodePudding user response:

Unlike C#, PowerShell loves implicit type conversions - and it'll implicitly parse and convert a string value to its cognate enum value when you assign it to an enum-typed property:

$zipfile.UseZip64WhenSaving = 'AsNecessary'

Alternatively, make sure you qualify the enum type name:

#$zipfile.UseZip64WhenSaving = [Ionic.Zip.Zip64Option]::AsNecessary

It's also worth noting that all PowerShell string literals act like verbatim strings in C# - in other words, \ is not a special character that needs to be escaped:

$directoryToZip = "D:\mybigfiles\"
# ...
$e = $zipfile.AddDirectory($directoryToZip, "home")
$zipfile.Save("D:\mybigfiles\big.zip")
  • Related