C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ArrayListをファイルに保存し別アプリで読み込みたい


(過去ログ 57 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■32333 / inTopicNo.1)  ArrayListをファイルに保存し別アプリで読み込みたい
  
□投稿者/ 初心者 (1回)-(2009/02/05(Thu) 10:23:13)

分類:[C#] 

初心者の知識では行き詰まり
どうかお力をお貸しください

Aというアプリで
Album構造体のArrayListを作成し
Bというアプリで
Album構造体情報を表示したいのです

ファイル保存はシリアル化して保存することができることはつかんだのですが
逆シリアルの際 アプリ名が変わると無理なようで断念しました

なにか方法がありましたら お教えください
よろしくおねがいします

       public struct Album
        {	    public String Title;        //タイトル
	    public String Comment;      //コメント
             public Image ImageFile;     //画像           
        };
        ArrayList AlbumArr; 
        public Form1()
        {
            InitializeComponent();
            AlbumArr = new ArrayList();
            Album Album1 = new Album();
            Album1.Title = "1件目";
            Album1.Comment = "1のコメント";
            Album1.ImageFile = Image.FromFile(@"c:\1.Png");
            AlbumArr.Add(Album1);
            Album1.Title = "2件目";
            Album1.Comment = "2のコメント";
            Album1.ImageFile = Image.FromFile(@"c:\2.Png");
            AlbumArr.Add(Album1);
            //AlbumArrを1ファイルにまとめて保存しこのデータを別アプリで読み込みたい
        }

引用返信 編集キー/
■32337 / inTopicNo.2)  Re[1]: ArrayListをファイルに保存し別アプリで読み込みたい
□投稿者/ 梅のど飴 (1回)-(2009/02/05(Thu) 11:07:13)
No32333 (初心者 さん) に返信
> public struct Album
> { public String Title; //タイトル
> public String Comment; //コメント
> public Image ImageFile; //画像
> };

実際にシリアライズ・デシリアライズしている部分のソースや、表示される
エラー内容も記載して頂けると他の方も回答し易いかと思うのですが、1点
だけ確認させてください。

Album構造体をAとBの両方に定義されていますでしょうか?

もう少し踏み込むと、AとBで同じ構造体を共有しますので、Album構造体を
DLL化してプログラム本体から切り出して、AとBの双方から参照される様な
作り方をされては如何でしょうか。


引用返信 編集キー/
■32341 / inTopicNo.3)  Re[2]: ArrayListをファイルに保存し別アプリで読み込みたい
□投稿者/ 初心者 (3回)-(2009/02/05(Thu) 11:39:37)
2009/02/05(Thu) 12:53:14 編集(投稿者)

梅のど飴さんご返事ありがとうございます
>
> 実際にシリアライズ・デシリアライズしている部分のソースや、表示される
> エラー内容も記載して頂けると他の方も回答し易いかと思うのですが、1点
> だけ確認させてください。
>
> Album構造体をAとBの両方に定義されていますでしょうか?

現状は AlbumCreatorアプリを作成が終わり
AlbumCreatorの登録機能をなくしたAlbumViewアプリの作成しようとし
AlbumCreatorをコピーしてアプリ名をAlbumViewにしただけなのですが
ファイルを開くときに
「アセンブリ 'AlbumCreator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' が見つかりません。」
とのエラーメッセージがでるようになりました

//SAVE AlbumCreatorのみ
FileStream fsSave= new FileStream("C:\1.dat",FileMode.Create,FileAccess.Write);
BinaryFormatter bfSave = new BinaryFormatter();
bfSave.Serialize(fsSave, (object)AlbumArr);
fsSave.Close();

//LOAD 共通 
FileStream fsLoad = new FileStream("C:\1.dat", FileMode.Open, FileAccess.Read);
BinaryFormatter bfLoad = new BinaryFormatter();
object obj = bfLoad .Deserialize(fsLoad); //ここでAlbumViewのみエラー
fsLoad.Close();
AlbumArr = (ArrayList) obj;

> もう少し踏み込むと、AとBで同じ構造体を共有しますので、Album構造体を
> DLL化してプログラム本体から切り出して、AとBの双方から参照される様な
> 作り方をされては如何でしょうか。
すいません そうすれば いいのは分かっているのですが
C#初めて まだ4日目なのでそこまでの知識がありません
今後勉強しDLLの使い方を覚えて行きたいと思います

引用返信 編集キー/
■32355 / inTopicNo.4)  Re[1]: ArrayListをファイルに保存し別アプリで読み込みたい
□投稿者/ オショウ (86回)-(2009/02/05(Thu) 13:16:16)
> なにか方法がありましたら お教えください
> よろしくおねがいします

  これ参考になりません?

  ttp://7ujm.net/CSharp/17.html

> 逆シリアルの際 アプリ名が変わると無理なようで断念しました

  この意味が解りませんが・・・
  多分、データの定義をStructureにしていることかな・・・
  Publicクラスにしましょう!

以上。

引用返信 編集キー/
■32359 / inTopicNo.5)  Re[3]: ArrayListをファイルに保存し別アプリで読み込みたい
□投稿者/ 梅のど飴 (2回)-(2009/02/05(Thu) 13:23:17)
No32341 (初心者 さん) に返信

※書き殴り的な内容で申し訳ありません(~_~; ちょっと時間が無い物で。

> AlbumCreatorをコピーしてアプリ名をAlbumViewにしただけなのですが
> ファイルを開くときに
> 「アセンブリ 'AlbumCreator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' が見つかりません。」
> とのエラーメッセージがでるようになりました

バイナリーフォーマットでファイルに書き込まれているので、憶測でしかありませんが
Album構造体がAlbumCreatorクラスの中に記述されていないでしょうか?

恐らく "AlbumCreatorクラスに含まれるAlbum構造体" って形でデータが保存されているハズです。

> AlbumCreatorをコピーしてアプリ名をAlbumViewにしただけなのですが

これが単純なファイル名だけの変更ではなく、クラス名から変更したのであれば
"AlbumViewクラスに含まれるAlbum構造体"って形になりますので、同じように見えて違う物と
解釈されているのではないでしょうか。

なので構造体の記述位置をAlbumCreatorクラスの外側にしてやれば、一応は動作するような
気がします。



> C#初めて まだ4日目なのでそこまでの知識がありません
> 今後勉強しDLLの使い方を覚えて行きたいと思います

詳細な説明は省かせて頂きますが、こんな感じで行けると思います。

AlbumCreatorの「ソリューション」の方で、"追加"→"新しいプロジェクト"→"クラスライブラリ"
を選び、新しく追加されたプロジェクトに適当な名前を付けてAlbum構造体を移植。

更にAlbumCreatorの「プロジェクト」の方に"参照の追加"→"プロジェクト"から追加し、ソリューションをビルド。

最後にAlbumViewの「プロジェクト」の"参照の追加"→"参照"から上記ビルドで生成されたDLLを追加してビルド。

引用返信 編集キー/
■32368 / inTopicNo.6)  Re[2]: ArrayListをファイルに保存し別アプリで読み込みたい
□投稿者/ 初心者 (4回)-(2009/02/05(Thu) 14:43:19)
オショウさん 梅のど飴さん

ご回答ありがとうございます


"クラスライブラリ"としてAlbumクラスを持つことにより解決できました
詳しい追加手順がありとても助かりました

ネームスペース内に構造体を持つと
そのネームスペース情報持った構造体として登録されてしまうのですね

大変勉強になりました
ありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -