39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using SevenZip;
|
|
using SPTInstaller.Models;
|
|
|
|
namespace SPTInstaller.Helpers;
|
|
|
|
public static class ZipHelper
|
|
{
|
|
public static Result Decompress(FileInfo archiveFile, DirectoryInfo outputDirectory,
|
|
IProgress<double> progress = null)
|
|
{
|
|
try
|
|
{
|
|
using var archiveStream = archiveFile.OpenRead();
|
|
|
|
var dllPath = Path.Join(DownloadCacheHelper.CachePath, "7z.dll");
|
|
|
|
SevenZipBase.SetLibraryPath(dllPath);
|
|
|
|
var extractor = new SevenZipExtractor(archiveStream);
|
|
|
|
extractor.Extracting += (_, args) => { progress.Report(args.PercentDone); };
|
|
|
|
extractor.ExtractArchive(outputDirectory.FullName);
|
|
|
|
outputDirectory.Refresh();
|
|
|
|
if (!outputDirectory.Exists)
|
|
{
|
|
return Result.FromError($"Failed to extract files: {archiveFile.Name}");
|
|
}
|
|
|
|
return Result.FromSuccess();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Result.FromError(ex.Message);
|
|
}
|
|
}
|
|
} |