diff --git a/src/umbraco.cms/businesslogic/Packager/Installer.cs b/src/umbraco.cms/businesslogic/Packager/Installer.cs
index 0499157427..6f1ecbf5c7 100644
--- a/src/umbraco.cms/businesslogic/Packager/Installer.cs
+++ b/src/umbraco.cms/businesslogic/Packager/Installer.cs
@@ -5,7 +5,6 @@ using System.Globalization;
using System.IO;
using System.Xml;
using System.Linq;
-using ICSharpCode.SharpZipLib.Zip;
using Umbraco.Core;
using Umbraco.Core.Auditing;
using Umbraco.Core.IO;
@@ -14,6 +13,7 @@ using Umbraco.Core.Packaging;
using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
using System.Diagnostics;
+using System.IO.Compression;
using umbraco.cms.businesslogic.template;
using umbraco.interfaces;
using Umbraco.Core.Events;
@@ -520,7 +520,7 @@ namespace umbraco.cms.businesslogic.packager
///
public void InstallCleanUp(int packageId, string tempDir)
{
-
+
if (Directory.Exists(tempDir))
{
Directory.Delete(tempDir, true);
@@ -751,8 +751,6 @@ namespace umbraco.cms.businesslogic.packager
private static string UnPack(string zipName, bool deleteFile)
{
- // Unzip
-
//the temp directory will be the package GUID - this keeps it consistent!
//the zipName is always the package Guid.umb
@@ -765,48 +763,14 @@ namespace umbraco.cms.businesslogic.packager
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
Directory.CreateDirectory(tempDir);
- var s = new ZipInputStream(File.OpenRead(zipName));
-
- ZipEntry theEntry;
- while ((theEntry = s.GetNextEntry()) != null)
- {
- string fileName = Path.GetFileName(theEntry.Name);
-
- if (fileName != String.Empty)
- {
- FileStream streamWriter = File.Create(tempDir + Path.DirectorySeparatorChar + fileName);
-
- int size = 2048;
- byte[] data = new byte[2048];
- while (true)
- {
- size = s.Read(data, 0, data.Length);
- if (size > 0)
- {
- streamWriter.Write(data, 0, size);
- }
- else
- {
- break;
- }
- }
-
- streamWriter.Close();
-
- }
- }
-
- // Clean up
- s.Close();
+ ZipFile.ExtractToDirectory(zipName, tempDir);
if (deleteFile)
{
File.Delete(zipName);
}
-
return tempDir;
-
}
#endregion
diff --git a/src/umbraco.cms/businesslogic/Packager/PackageInstance/utill.cs b/src/umbraco.cms/businesslogic/Packager/PackageInstance/utill.cs
index 2780bb4423..b1ca6696fe 100644
--- a/src/umbraco.cms/businesslogic/Packager/PackageInstance/utill.cs
+++ b/src/umbraco.cms/businesslogic/Packager/PackageInstance/utill.cs
@@ -11,13 +11,13 @@ using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
-using System.IO;
+using System.IO;
+using System.IO.Compression;
using System.Xml;
using umbraco.cms.businesslogic.template;
using umbraco.cms.businesslogic.web;
using umbraco.cms.businesslogic.macro;
-using ICSharpCode.SharpZipLib.Zip;
using Umbraco.Core;
using Umbraco.Core.IO;
@@ -278,58 +278,24 @@ namespace umbraco.cms.businesslogic.packager
/// The save path.
public static void ZipPackage(string Path, string savePath)
{
- string OutPath = savePath;
-
ArrayList ar = GenerateFileList(Path);
// generate file list
// find number of chars to remove from orginal file path
- int TrimLength = (Directory.GetParent(Path)).ToString().Length;
- TrimLength += 1;
-
- //remove '\'
- FileStream ostream;
-
- byte[] obuffer;
-
- ZipOutputStream oZipStream = new ZipOutputStream(System.IO.File.Create(OutPath));
- // create zip stream
-
-
- oZipStream.SetLevel(9);
- // 9 = maximum compression level
- ZipEntry oZipEntry;
-
- foreach (string Fil in ar) // for each file, generate a zipentry
+ using (var memoryStream = new MemoryStream())
{
- oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength));
- oZipStream.PutNextEntry(oZipEntry);
-
-
- if (!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory
+ using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create))
{
- ostream = File.OpenRead(Fil);
-
- obuffer = new byte[ostream.Length];
-
- // byte buffer
- ostream.Read(obuffer, 0, obuffer.Length);
-
- oZipStream.Write(obuffer, 0, obuffer.Length);
- ostream.Close();
+ foreach (string file in ar)
+ {
+ if (file.EndsWith(@"/") != true) // it's not a directory
+ {
+ archive.CreateEntryFromFile(file, System.IO.Path.GetFileName(file));
+ }
+ }
}
}
- oZipStream.Finish();
- oZipStream.Close();
- oZipStream.Dispose();
- oZipStream = null;
-
- oZipEntry = null;
-
-
- ostream = null;
- ar.Clear();
- ar = null;
+
}
private static ArrayList GenerateFileList(string Dir)
diff --git a/src/umbraco.cms/businesslogic/utilities/Zip.cs b/src/umbraco.cms/businesslogic/utilities/Zip.cs
index 36e9b6fc53..22450aa12f 100644
--- a/src/umbraco.cms/businesslogic/utilities/Zip.cs
+++ b/src/umbraco.cms/businesslogic/utilities/Zip.cs
@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
-using System.IO;
+using System.IO;
+using System.IO.Compression;
using System.Text;
using System.Web;
-using ICSharpCode.SharpZipLib.Zip;
using umbraco;
namespace umbraco.cms.businesslogic.utilities
@@ -12,47 +12,13 @@ namespace umbraco.cms.businesslogic.utilities
{
public static void UnPack(string ZipFilePath, string UnPackDirectory, bool DeleteZipFile)
{
- // Unzip
- string tempDir = UnPackDirectory;
- Directory.CreateDirectory(tempDir);
-
- ZipInputStream s = new ZipInputStream(File.OpenRead(ZipFilePath));
-
- ZipEntry theEntry;
- while ((theEntry = s.GetNextEntry()) != null)
+ if (Directory.Exists(UnPackDirectory) != true)
{
- string directoryName = Path.GetDirectoryName(theEntry.Name);
- string fileName = Path.GetFileName(theEntry.Name);
-
- if (fileName != String.Empty)
- {
- FileStream streamWriter = File.Create(tempDir + Path.DirectorySeparatorChar + fileName);
-
- int size = 2048;
- byte[] data = new byte[2048];
- while (true)
- {
- size = s.Read(data, 0, data.Length);
- if (size > 0)
- {
- streamWriter.Write(data, 0, size);
- }
- else
- {
- break;
- }
- }
-
- streamWriter.Close();
-
- }
- }
-
- // Clean up
- s.Close();
+ Directory.CreateDirectory(UnPackDirectory);
+ }
+
if (DeleteZipFile)
File.Delete(ZipFilePath);
-
}
}
diff --git a/src/umbraco.cms/umbraco.cms.csproj b/src/umbraco.cms/umbraco.cms.csproj
index 9defce9dde..792279ad10 100644
--- a/src/umbraco.cms/umbraco.cms.csproj
+++ b/src/umbraco.cms/umbraco.cms.csproj
@@ -129,6 +129,8 @@
System.Data
+
+
System.Security