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

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

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

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

たとえば、次のコードは、ストリームに DataGrid を保存して読み戻します:

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;
            }
        }