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; } }
|
関連トピック