WPFとVB.NETでデータをシリアライズしてZipファイルに保存
データをシリアライズしてZipファイルにして保存してから
逆方向の
保存したZipファイルを読み込んでデシリアライズしてデータに戻すまでの処理
ゲームのセーブとロードみたいなのをPixtack紫陽花2ndでも使いたいってのが目的
Zipファイルを扱うには準備が必要
System.IO.Compressionを参照の追加に追加する
検索窓にcompreでSystem.IO.Compressionが見つかるのでチェック入れてOK
これで
VBコード
これを実行すると
アプリの実行ファイルと同じフォルダにSave1.zipというファイルが作成される
この中にはsave.binというファイルが入っていて、これがシリアライズされたデータになっている
保存するデータになる部分のクラス、名前はSaveDataにした
データの型はString、Integer、Doubleにしたけどシリアライズできる型なら何でもいい
SaveDataを2つ作成してリストに入れる、このリストをシリアライズしてZipにして保存することになる
リストの名前はAllSaveDataをにした
AllSaveDataをシリアライズしてZipにして保存
リストをシリアライズしたものをMemoryStreamに入れておいて
ZipArchiveってのがZipファイルになって
ZipArchiveEntryってのがZipファイルの中身の一つ一つになる感じかなあ
で、そのZipArchiveEntryにMemoryStreamをコピー
コピーする前にMemoryStreamのPositionを0(先頭?)にしないとエラーになる
ここまでの処理でZipファイルが作成される
アプリの実行ファイルと同じフォルダにSave1.zipファイルが作成される
中にはsave.binが入っている
メモ帳とかで開いてみると
これを読み込むのが次の処理
さっきの処理の逆になる感じ、かなあ
読み込んでデシリアライズしたデータは
SaveDataFromZipって名前をつけたリストに入れた
この中身がAllSaveDataと同じになっていれば成功ってことになる
ここから処理を進めて
元のデータAllSaveDataと読み込んだデータのSaveDataFromZipの中身が同じなので期待通りの動作!
シリアライズできる型やクラスならわざわざZipにする必要ないんだけど
目的は複数画像(BitmapSource)と画像それぞれの表示位置とかのデータを1つのファイルに保存したいってことで、そのためにはZipファイルに固めるのがいいかなあと思ったから今回のテストアプリ
次回は画像も含めたものでテスト↓
WPFとVBで複数画像(BitmapSource)とシリアライズした文字列(String)や数値(Integerとか)を1つのZipファイルにする ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14079902.html
http://blogs.yahoo.co.jp/gogowaten/14079902.html
今回はいつにも増してよくわかっていなくて
とくにStream関係がわからん
参照したところ
System.IO.Compression.ZipArchive - Programming/.NET Framework/クラスライブラリ - 総武ソフトウェア推進所
http://smdn.jp/programming/netfx/fcl/System.IO.Compression.ZipArchive/
ストリーム - Programming/.NET Framework - 総武ソフトウェア推進所
http://smdn.jp/programming/netfx/stream/
今回のコード
Wpf_test101_シリアライズしてZip - Visual Studio Team Services
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test101_%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6Zip&version=GBmaster&_a=contents
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test6?path=%2FWpf_test101_%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6Zip&version=GBmaster&_a=contents