Zip for UWP
中レベル:C1ZStreamReader および C1ZStreamWriter クラス
Zip の基本 > 中レベル:C1ZStreamReader および C1ZStreamWriter クラス

C1ZStreamReader クラスと C1ZStreamWriter クラスを使用することで、zip ファイル内だけでなく、任意の .NET ストリームでデータ圧縮を使用することができます。

C1ZStreamReader オブジェクトと C1ZStreamWriter オブジェクトを使用するには、それらを通常のストリームにアタッチし、そのストリームを通してデータを読み書きします。データは、基底のストリームで直ちに圧縮(または展開)されます。

この設計により、ネイティブ .NET ストリームとの統合性が高まります。次の図に、この設計がどのように機能するかを示します。

たとえば、次のコードを実行すると、DataGrid がストリームに保存されて読み取られます。

C# コードの書き方

C#
コードのコピー
PersonList personList = new PersonList();

public MainPage()
{
InitializeComponent();
}
// DataGrid を作成します
private void btnCreate_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
personList.Persons.Add(new Person()
{
FirstName = string.Format("First Name {0}", i),
LastName = string.Format("Last Name {0}", i),
Age = i,
City = string.Format("City {0}", i)
});
}

this.dataGrid1.ItemsSource = personList.Persons;
}

// ストリームにデータを保存します
private void btnSave_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog dlgSaveFile = new SaveFileDialog();

if (dlgSaveFile.ShowDialog() == true)
{
Stream stream = dlgSaveFile.OpenFile();

DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList));
dcs.WriteObject(stream, personList);
stream.Close();
}




}
// データを圧縮します
private void btnSaveCompressed_Click(object sender, RoutedEventArgs e)
{
var dlgSaveFile = new SaveFileDialog();

if (dlgSaveFile.ShowDialog() == true)
{
Stream stream = dlgSaveFile.OpenFile();
//C1ZStreamWriter を使用してストリームを圧縮します。
C1ZStreamWriter compressor = new C1ZStreamWriter(stream);

DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList));
dcs.WriteObject(compressor, personList);
stream.Close();
}
}

// ストリームからデータをロードします
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
var dlgOpenFile = new OpenFileDialog();
this.dataGrid1.ItemsSource = null;

if (dlgOpenFile.ShowDialog() == true)
{
Stream stream = dlgOpenFile.File.OpenRead();

DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList));
PersonList pl = (PersonList)dcs.ReadObject(stream);
stream.Close();

this.dataGrid1.ItemsSource = pl.Persons;

}
}

// 圧縮データをロードします
private void btnLoadCompressed_Click(object sender, RoutedEventArgs e)
{
var dlgOpenFile = new OpenFileDialog();
this.dataGrid1.ItemsSource = null;

if (dlgOpenFile.ShowDialog() == true)
{
Stream stream = dlgOpenFile.File.OpenRead();

DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList));
//C1ZStreamReader を使用してストリームを圧縮解除します。
C1ZStreamReader compressor = new C1ZStreamReader(stream);

PersonList pl = (PersonList)dcs.ReadObject(compressor);
stream.Close();

this.dataGrid1.ItemsSource = pl.Persons;
}
}
関連トピック