C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトでZip形式の圧縮ファイルにFileStreamからファイルを追加する方法です。
[ZipArchiveEntry]で追加
WinUI3プロジェクトの場合、[System.IO.Compression]アセンブリを追加すると、比較的簡単に、Zip形式のファイルにアクセスが可能です。
実体ファイルがある場合は[ZipArchiveEntry]クラスの[CreateEntryFromFile]メソッドでファイルの場所を使います。
実体ファイルが無い場合には[CreateEntry]メソッドで[StreamWriter]クラスで書き込むことが可能です。
例えば、Xamlを修正して適当なボタンを配置してイベントハンドラーをを追加します。
<Grid>
<Button Click="Button_Click">Save</Button>
</Grid>
イベント内でFileSavePickerで指定したZipファイルに新しいファイルを追加します。
private async void Button_Click(object sender, RoutedEventArgs e)
{
IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
FileSavePicker picker = new Windows.Storage.Pickers.FileSavePicker();
InitializeWithWindow.Initialize(picker, hWnd);
if (picker != null)
{
picker.FileTypeChoices.Add("Zip Compression", new List<string>() { ".zip" });
StorageFile destinationfile = await picker.PickSaveFileAsync();
if (destinationfile != null)
{
using (FileStream zipFile = new FileStream(destinationfile.Path, FileMode.Open))
{
using (System.IO.Compression.ZipArchive zipArchive = new System.IO.Compression.ZipArchive(zipFile, ZipArchiveMode.Update))
{
ZipArchiveEntry zipEntry = zipArchive.CreateEntry("sample.txt");
using (StreamWriter writer = new StreamWriter(zipEntry.Open()))
{
writer.WriteLine("Hello World!");
}
}
}
}
}
}
まとめ
今回は、短い記事ですが WinUI3プロジェクトでZip形式の圧縮ファイルにFileStreamからファイルを追加する方法について紹介しました。
WinUI3プロジェクトの場合、[System.IO.Compression]アセンブリを追加して、Zip形式のファイル内の操作が可能になります。
実体ファイルが無い場合には[CreateEntry]メソッドで[StreamWriter]クラスで書き込むことが可能です。
WinUI 3 アプリでZip形式ファイルの操作をしたい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。