42 строки
1.3 KiB
C#
42 строки
1.3 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
|
|
namespace Xamarin.iOS.Tasks.Windows {
|
|
internal static class Zip
|
|
{
|
|
internal static void Extract(string sourceFileName, string destinationPath)
|
|
{
|
|
// We use a temp dir because the extraction dir should not exist for the ZipFile API to work
|
|
var tempExtractionPath = Path.Combine (Path.GetTempPath (), "Xamarin", "Extractions", Guid.NewGuid ().ToString ());
|
|
|
|
ZipFile.ExtractToDirectory (sourceFileName, tempExtractionPath);
|
|
|
|
CopyDirectory (tempExtractionPath, destinationPath);
|
|
|
|
// Fixes last write time of all files in the Zip, because the files keep the last write time from the Mac.
|
|
foreach (var filePath in Directory.EnumerateFiles (destinationPath, "*.*", SearchOption.AllDirectories)) {
|
|
new FileInfo (filePath).LastWriteTime = DateTime.Now;
|
|
}
|
|
|
|
Directory.Delete (tempExtractionPath, recursive: true);
|
|
}
|
|
|
|
static void CopyDirectory (string source, string destination)
|
|
{
|
|
var sourceDirectoryInfo = new DirectoryInfo (source);
|
|
|
|
Directory.CreateDirectory (destination);
|
|
|
|
foreach (var file in sourceDirectoryInfo.GetFiles ()) {
|
|
file.CopyTo (Path.Combine (destination, file.Name));
|
|
}
|
|
|
|
foreach (var dir in sourceDirectoryInfo.GetDirectories ()) {
|
|
CopyDirectory (dir.FullName, Path.Combine (destination, dir.Name));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|