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

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

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

Re[4]: C#で、ユーザ定義型のデータをファイルに保存する方法


(過去ログ 26 を表示中)

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

■11871 / inTopicNo.1)  C#で、ユーザ定義型のデータをファイルに保存する方法
  
□投稿者/ jun (1回)-(2007/12/22(Sat) 21:46:35)

分類:[C#] 

C# (VisualStudio2005)で、ユーザ定義型のデータをファイルに保存したい。

クラス型や構造体型で宣言したユーザ定義型のデータをファイルに保存する方法に
ついて調べてみたのですが、以下の処理を実行するとクラス名やアセンブリ名等も
ファイル内に書かれてしまいます。

[Serializable]
public class Hoge // 書きたいクラス(UDT)
{
 ushort shtTest = 0xFFFF;
 byte[] aryTest = { 0xEE,0xDD};
}

class Program
{
 static void Main(string[] args)
 {
  Hoge test = new Hoge(); // 書きたいクラスを実体化
  BinaryFormatter buf = new BinaryFormatter(); //BinaryFormatterを実体化
  Stream FileSt = null;  // Streamを宣言

              // ファイルオープン
  FileSt = File.Open("testing.bin", FileMode.Create,FileAccess.Write);
              // シリアライズ&書込み
  buf.Serialize(FileSt, test);
              // ファイルクローズ
  FileSt.Close();
              // キー待ち
  Console.ReadLine();

  return;
 }
}

上記のユーザ定義型データを 『 0xFF,0xFF,0xEE,0xDD 』
というようにファイルに書く方法はないでしょうか?


どなたかご存じの方がいらっしゃいましたら何卒ご教授を宜しくお願いします。
引用返信 編集キー/
■11872 / inTopicNo.2)  Re[1]: C#で、ユーザ定義型のデータをファイルに保存する方法
□投稿者/ 渋木宏明(ひどり) (611回)-(2007/12/22(Sat) 22:41:23)
渋木宏明(ひどり) さんの Web サイト
> クラス型や構造体型で宣言したユーザ定義型のデータをファイルに保存する方法に
> ついて調べてみたのですが、以下の処理を実行するとクラス名やアセンブリ名等も
> ファイル内に書かれてしまいます。

「シリアライズ」とはそういうものです。

シリアライズは「データをファイルに書き出すための手段」ではなく、「オブジェクトの状態をファイル等に保存するための手段」と捉えるべきです。


> 上記のユーザ定義型データを 『 0xFF,0xFF,0xEE,0xDD 』
> というようにファイルに書く方法はないでしょうか?

任意の(=自分が希望する)書式で「データファイル」を作成したいなら、StreamWriter や BinaryWriter でどうぞ。
引用返信 編集キー/
■11873 / inTopicNo.3)  Re[1]: C#で、ユーザ定義型のデータをファイルに保存する方法
□投稿者/ いしだ (68回)-(2007/12/23(Sun) 01:58:25)
xmlでインスタンスを保存する方法はどうでしょう?

// 書き込み
XmlSerializer xs = new XmlSerializer(typeof(Hoge));
FileStream fs = new FileStream(filename, FileMode.Create);
xs.Serialize(fs, hoge);
fs.Close();

// 読み込み
XmlSerializer xs = new XmlSerializer(typeof(Hoge));
FileStream fs = new FileStream(filename, FileMode.Open);
Hoge hoge = (Hoge)xs.Deserialize(fs);
fs.Close();

といった感じです。

引用返信 編集キー/
■11875 / inTopicNo.4)  Re[2]: C#で、ユーザ定義型のデータをファイルに保存する方法
□投稿者/ επιστημη (743回)-(2007/12/23(Sun) 02:39:18)
επιστημη さんの Web サイト
OkWebにも類似の質問があがっています。ご参考まで。

http://okwave.jp/qa3619553.html

引用返信 編集キー/
■11889 / inTopicNo.5)  Re[3]: C#で、ユーザ定義型のデータをファイルに保存する方法
□投稿者/ jun (2回)-(2007/12/23(Sun) 17:55:43)
ご回答いただいた皆様

こちらのサイトの処理を参考とし、うまくいきました。
http://mobiquitous.com/programming/csharp-tips.html#struct

構造体での方法ですが、データが大容量化してしまった場合は
バイト配列を返すメソッドを作成し、対応しようと思います。


本当にありがとうございました。
大変助かりました。
引用返信 編集キー/
■11890 / inTopicNo.6)  Re[4]: C#で、ユーザ定義型のデータをファイルに保存する方法
□投稿者/ jun (3回)-(2007/12/23(Sun) 17:57:56)
2007/12/23(Sun) 17:59:52 編集(投稿者)
2007/12/23(Sun) 17:59:23 編集(投稿者)

補足

上記の方法に他の参考ソース

using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
extern public static uint CopyMemory(byte[] Destination, ref SND Source, uint Length);

CopyMemory(buf, ref snd, (uint)Marshal.SizeOf(typeof(SND)));


を流用しました。

もし、同じような事象でお困りの方がいらっしゃれば、参考にしていただけれると思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -