一个自定义格式文件,这个文件能够将图片和文字共存,请问一下思路?
解决方案 »
- C#2008,DataGridView中用soSymbolLib .Draw的方式输出符号的问题
- 关于多线程间通信的问题
- StatusStrip怎么设置高度
- 线程问题??
- 在一个button1_Click事件里面如何等待另一个事件执行完毕再继续执行。
- 新手求助!不使用MIS打印通,如何将DataGrid中的数据打印出来,急!!
- C#一个简单的类型转化问题
- 求一正则表达式的写法
- 关于C# Socket.BeginReceiveFrom的几个问题
- 有谁用C#开发出什么桌面应用程序吗?
- 关于实时(频率很快)【序列化】出现的问题!!!
- C#无法声明全局对象 在多窗口的情况下 一个应用程序只用一个数据库连接对象
1.图片和文字全部转为byte数组,每个数组前加长度和类型,然后合并所有数组,存入文件,读出时再解析出来。 2.写一个可序列化的类,类中包含图片和字符串,然后序列化到文件。。不过好像Image是不能序列化的,可定义为byte[]
如richetextbox保存
还不如直接使用现成的xml文件格式处理,既可以记录文字,也可以记录图片。
另外使用DataSet作为存储和读取xml文件的途径,还可以省去很多的处理步骤和检索步骤。
以下代码纯属现场编写,仅供参考。
DataSet ds = new DataSet();
DataTable dt = ds.Table.Add("abc");
dt.Columns.Add("col1", SqlType.string);
dt.Columns.Add("col2", SqlType.string);
dt.Columns.Add("col3", SqlType.byte[]);
DataRow dr = dt.Rows.NewRow;
dr[0] = "id";
dr[1] = "name";
FileStream fs = new FileStream("C:\\abc.jpg", FileMode.OpenOrCreate);
byte[] bdata = new byte[fs.Length];
fs.Read(bdata, 0, bdata.Length);
fs.Close();
dr[2] = bdata;
dt.Rows.Add(dr);
ds.Writexml("C:\\abc.xml");
....
ds.Readxml("C:\\abc.xml");
dt.Columns.Add("col2");
dt.Columns.Add("col3", System.Type.GetType("System.Byte[]"));
DataRow dr = dt.NewRow();
对文字的读写,直接用之前提到的两个类就可以了,但对于图片的读写就会略微复杂一点了。System.Drawing.Image.Save方法虽然可以直接把图片的内容保存到一个流中,但可能会重置流的位置,也就是说,当图片保存完毕以后,流的当前位置可能不会在下一个读写位,而有可能跑到了流的最头上,这样如果直接使用了文件流,就会出问题了。比较合适的办法是在写入时,先将图片数据保存到一个MemoryStream中,再将此流的内容写入到文件流中,而在读出时则相反,先将文件流的内容读入到MemoryStream,再用这个流去初始化一个Image对象。