C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
掲示板トップ
C# と VB.NET のサンプル
新規作成
利用方法/規約
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
■103870
/ 1階層)
1ファイルのパスワード付きZIP圧縮
□投稿者/ 魔界の仮面弁士
(3901回)-(2025/10/21(Tue) 19:56:13)
■
No103868
(furu さん) に返信
> VS2026 C# .NetFramework4.8
Visual Studio 2026 Insiders ですか?
まだ試してないや…。
> 久々にZIP圧縮しようとしたら
> なかなかいい方法が見つかりません。
7za.exe を Process.Start で呼んだら駄目ですか?
コマンドライン的には
7za a -tzip -pYourPassword archive.zip target.txt
ですよね。
7-Zip CLI の場合はこんな感じ。
// パスワード付き zip にする方法
var psi = new ProcessStartInfo {
FileName = "7z.exe",
Arguments = $"a -tzip -pYourPassword secure.zip target.txt",
RedirectStandardOutput = true,
UseShellExecute = false
};
Process.Start(psi);
自己解凍にする場合は バッチ処理的に言えば
copy /b 7z.sfx + config.txt + archive.7z archive.exe
に相当する追加処理を行うことで実装できます。
別プロセスにしたくないなら、SevenZipSharp ってのもあります(7z.dll 依存)。
ただし AES 暗号化はサポートするものの、AES256 に非対応だったかな。
https://qiita.com/koshian2/items/f648892f37cddaab7093
> SharpZipLib
> 1ファイルのやり方がわからない
こちらは 7z.dll に依存せずに済みますね。
// using ICSharpCode.SharpZipLib.Zip;
string inputFile = @"C:\Sample\圧縮対象ファイル.TXT";
string outputZip = @"C:\Sample\出力先.ZIP";
string password = "YourPassword";
// FileStream の代わりに MemoryStream を使えば、オンメモリで処理することもできる
using (FileStream fsOut = File.Create(outputZip))
using (ZipOutputStream zipStream = new ZipOutputStream(fsOut))
{
zipStream.SetLevel(9); // 圧縮率(0〜9)
zipStream.Password = password;
zipStream.UseZip64 = UseZip64.Off;
// AES256 暗号化付きエントリを作成
ZipEntry entry = new ZipEntry(Path.GetFileName(inputFile)) { AESKeySize = 256, DateTime = DateTime.Now };
zipStream.PutNextEntry(entry); // 複数ファイルを追加する場合は PutNextEntry を繰り返す
using (FileStream fsIn = File.OpenRead(inputFile))
{
fsIn.CopyTo(zipStream);
}
zipStream.CloseEntry();
}
有償でも良ければ、他にもいくつかのライブラリがあるみたいです。
編集キー/
編集
前の記事
(元になった記事)
次の記事
(この記事の返信)
←1ファイルのパスワード付きZIP圧縮
/furu
→Re[2]: 1ファイルのパスワード付きZIP圧縮
/furu
上記関連ツリー
1ファイルのパスワード付きZIP圧縮
/ furu
(25/10/21(Tue) 16:51)
#103868
└
1ファイルのパスワード付きZIP圧縮
/ 魔界の仮面弁士
(25/10/21(Tue) 19:56)
#103870
←Now
└
Re[2]: 1ファイルのパスワード付きZIP圧縮
/ furu
(25/10/21(Tue) 20:36)
#103871
└
Re[3]: 1ファイルのパスワード付きZIP圧縮
/ 魔界の仮面弁士
(25/10/21(Tue) 21:57)
#103872
└
Re[4]: 1ファイルのパスワード付きZIP圧縮
/ furu
(25/10/22(Wed) 17:24)
#103873
解決済み
└
Re[5]: 1ファイルのパスワード付きZIP圧縮
/ furu
(25/10/22(Wed) 18:39)
#103874
解決済み
上記ツリーを一括表示
/
上記ツリーをトピック表示
上記の記事へ返信
入力内容にタグは利用できません。
他人を中傷する記事は管理者の判断で予告無く削除されます。
半角カナは使用しないでください。文字化けの原因になります。
名前、コメントは必須記入項目です。記入漏れはエラーになります。
入力内容の一部は、次回投稿時の手間を省くためブラウザに記録されます。
URL は自動的にリンクされます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
名前
(*必須)
E-Mail (任意)
Web サイト (任意)
投稿モード
通常モード
図表モード (ソースコードを貼る場合はこちらを使用)
本文
(質問の場合は、開発環境・使用言語のバージョンなどを最初に書いてください)
■No103870 (魔界の仮面弁士 さん) に返信 > ■No103868 (furu さん) に返信 >>VS2026 C# .NetFramework4.8 > > Visual Studio 2026 Insiders ですか? > まだ試してないや…。 > > >>久々にZIP圧縮しようとしたら >>なかなかいい方法が見つかりません。 > 7za.exe を Process.Start で呼んだら駄目ですか? > > コマンドライン的には > 7za a -tzip -pYourPassword archive.zip target.txt > ですよね。 > > > 7-Zip CLI の場合はこんな感じ。 > > // パスワード付き zip にする方法 > var psi = new ProcessStartInfo { > FileName = "7z.exe", > Arguments = $"a -tzip -pYourPassword secure.zip target.txt", > RedirectStandardOutput = true, > UseShellExecute = false > }; > Process.Start(psi); > > 自己解凍にする場合は バッチ処理的に言えば > copy /b 7z.sfx + config.txt + archive.7z archive.exe > に相当する追加処理を行うことで実装できます。 > > > > 別プロセスにしたくないなら、SevenZipSharp ってのもあります(7z.dll 依存)。 > ただし AES 暗号化はサポートするものの、AES256 に非対応だったかな。 > https://qiita.com/koshian2/items/f648892f37cddaab7093 > > >>SharpZipLib >> 1ファイルのやり方がわからない > > こちらは 7z.dll に依存せずに済みますね。 > > // using ICSharpCode.SharpZipLib.Zip; > > string inputFile = @"C:\Sample\圧縮対象ファイル.TXT"; > string outputZip = @"C:\Sample\出力先.ZIP"; > string password = "YourPassword"; > > // FileStream の代わりに MemoryStream を使えば、オンメモリで処理することもできる > using (FileStream fsOut = File.Create(outputZip)) > using (ZipOutputStream zipStream = new ZipOutputStream(fsOut)) > { > zipStream.SetLevel(9); // 圧縮率(0〜9) > zipStream.Password = password; > zipStream.UseZip64 = UseZip64.Off; > > // AES256 暗号化付きエントリを作成 > ZipEntry entry = new ZipEntry(Path.GetFileName(inputFile)) { AESKeySize = 256, DateTime = DateTime.Now }; > zipStream.PutNextEntry(entry); // 複数ファイルを追加する場合は PutNextEntry を繰り返す > using (FileStream fsIn = File.OpenRead(inputFile)) > { > fsIn.CopyTo(zipStream); > } > zipStream.CloseEntry(); > } > > > 有償でも良ければ、他にもいくつかのライブラリがあるみたいです。
編集キー
自分の投稿を編集する時に必要です
(半角8文字以内)
解決済み
/
解決したらチェックしておきましょう。
プレビュー/
管理者用
-
Child Tree
-