single.php

C# WinUI3でZipファイルにFileStreamからファイルを追加する方法

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形式ファイルの操作をしたい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です