私は、c#のファイルコンテンツからパスワードで保護されたZipを作成する必要があるプロジェクトに取り組んでいます。
System.IO.Compression.GZipStreamを使用してgzipコンテンツを作成する前。 .netには、ZipまたはRARパスワードで保護されたファイルを作成する機能がありますか?
DotNetZip を見てください
それはかなりすてきなドキュメントを持っており、また、実行時にdllを埋め込みファイルとしてロードすることができます。
残念ながら、フレームワークにはそのような機能はありません。 Zipファイルを作成する方法がありますが、パスワードはありません。 C#でパスワードで保護されたZipファイルを作成する場合は、 SevenZipSharp をお勧めします。基本的に7-Zipのマネージラッパーです。
SevenZipBase.SetLibraryPath(Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? Environment.CurrentDirectory,
"7za.dll"));
SevenZipCompressor compressor = new SevenZipCompressor();
compressor.Compressing += Compressor_Compressing;
compressor.FileCompressionStarted += Compressor_FileCompressionStarted;
compressor.CompressionFinished += Compressor_CompressionFinished;
string password = @"whatever";
string destinationFile = @"C:\Temp\whatever.Zip";
string[] sourceFiles = Directory.GetFiles(@"C:\Temp\YourFiles\");
if (String.IsNullOrWhiteSpace(password))
{
compressor.CompressFiles(destinationFile, sourceFiles);
}
else
{
//optional
compressor.EncryptHeaders = true;
compressor.CompressFilesEncrypted(destinationFile, password, sourceFiles);
}
さらにいくつかの選択肢を追加したいと思います。
.NETの場合は SharpZipLib を使用でき、Xamarinの場合は SharpZipLib.Portable を使用できます。
.NETの例:
using ICSharpCode.SharpZipLib.Zip;
// Compresses the supplied memory stream, naming it as zipEntryName, into a Zip,
// which is returned as a memory stream or a byte array.
//
public MemoryStream CreateToMemoryStream(MemoryStream memStreamIn, string zipEntryName) {
MemoryStream outputMemStream = new MemoryStream();
ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
zipStream.SetLevel(3); //0-9, 9 being the highest level of compression
zipStream.Password = "Your password";
ZipEntry newEntry = new ZipEntry(zipEntryName);
newEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(newEntry);
StreamUtils.Copy(memStreamIn, zipStream, new byte[4096]);
zipStream.CloseEntry();
zipStream.IsStreamOwner = false; // False stops the Close also Closing the underlying stream.
zipStream.Close(); // Must finish the ZipOutputStream before using outputMemStream.
outputMemStream.Position = 0;
return outputMemStream;
// Alternative outputs:
// ToArray is the cleaner and easiest to use correctly with the penalty of duplicating allocated memory.
byte[] byteArrayOut = outputMemStream.ToArray();
// GetBuffer returns a raw buffer raw and so you need to account for the true length yourself.
byte[] byteArrayOut = outputMemStream.GetBuffer();
long len = outputMemStream.Length;
}
より多くのサンプルを見つけることができます こちら 。
パスワード機能なしで生活できる場合は、 ZipStorer または System.IO.Compression
。