Cube.FileSystem.SevenZip is a wrapper library of the 7-Zip via COM interface. The repository also has an archiving or extracting application, which name is CubeICE. These libraries and applications are available for .NET Framework 3.5, 4.5 or later.
You can install the library through the NuGet package. Add a dependency in your project file using the following syntax:
<ItemGroup>
<PackageReference Include="Cube.FileSystem.SevenZip" Version="1.15.10" />
</ItemGroup>
Or select it from the NuGet packages UI on Visual Studio.
A simple example for archiving files is as follows. Note that the statement "using Cube.FileSystem.SevenZip;" has been omitted in all samples.
using (var writer = new ArchiveWriter(Format.Zip))
{
writer.Add(@"path\to\file");
writer.Add(@"path\to\directory_including_files");
writer.Option = new ZipOption { CompressionLevel = CompressionLevel.Ultra };
writer.Filters = new[] { ".DS_Store", "Thumbs.db", "__MACOSX", "desktop.ini" };
var progress = new Progress<Report>(e => DoSomething(e));
writer.Save(@"path\to\save.zip", "password", progress);
}
You create an ArchiveWriter object with an archiving format (e.g. Zip, SevenZip, ...), add files and/or directories you want to archive, set some additional options, and finally call the Save method. When you create Tar based archives, you can use a TarOption object for selecting a compression method.
using (var writer = new ArchiveWriter(Format.Tar))
{
writer.Option = new TarOption
{
CompressionMethod = CompressionMethod.BZip2, // GZip, BZip2, XZ or Copy
CompressionLevel = CompressionLevel.Ultra,
};
writer.Add(@"path\to\file");
writer.Add(@"path\to\directory_including_files");
writer.Save(@"path\to\save.tar.gz");
}
If you want to extract all files from the archive, you create an ArchiveReader object and call the Extract method. The 2nd argument of the constructor, that means the password of the archive, can be set string or Cube.Query<string> object. The latter is mainly used for implementing the interactive mode.
// Set password directly or using Query<string>
var password = new Cube.Query<string>(e =>
{
e.Result = "password";
e.Cancel = false;
});
using (var reader = new ArchiveReader(@"path\to\archive", password))
{
var progress = new Progress<Report>(e => DoSomething(e));
reader.Filters = new[] { ".DS_Store", "Thumbs.db", "__MACOSX", "desktop.ini" };
reader.Extract(@"path\to\directory", progress);
}
ArchvieReader.Items property can access each item of the archive. If you want to extract only the specific files, write as follows.
using (var reader = new ArchiveReader(@"path\to\archive", "password"))
{
// Save as "path\to\directory\{item.FullName}"
var directory = @"path\to\directory";
reader.Items[0].Extract(directory);
reader.Items[3].Extract(directory);
}
Note that ArchiveWriter and ArchiveReader classes need to execute in the same thread from constructing to destroying. Use Task.Run() in the whole transaction if you need to archive or extract files asynchronously.
- 7-Zip ... Cube.Native.SevenZip is optimized for Japanese encoding.
- AlphaFS
- NLog
Cube.FileSystem.SevenZip referred to the code of the following projects to implement some functions.
- Fork Cube.FileSystem.SevenZip repository.
- Create a feature branch from the master or stable branch (e.g. git checkout -b my-new-feature origin/master). Note that the master branch may refer some pre-released NuGet packages. Try the rake clean command when build errors occur.
- Commit your changes.
- Rebase your local changes against the master or stable branch.
- Run the dotnet test command or the Visual Studio (NUnit 3 test adapter) and confirm that it passes.
- Create new Pull Request.
Copyright © 2010 CubeSoft, Inc. The project is licensed under the Apache 2.0. Note that trade names, trademarks, service marks, or logo images distributed in CubeSoft applications are not allowed to reuse or modify all or parts of them.