c#结构体数据的存取 10

请问如何存入文件和如何读取文件?存入文件为追加存入。每次存数据均打开文件,存入一组结构体数据。主要用来储存数据用,或者有更好的方式存数据吗?小白,麻烦详细点,有源码最好。... 请问如何存入文件和如何读取文件?存入文件为追加存入。每次存数据均打开文件,存入一组结构体数据。
主要用来储存数据用,或者有更好的方式存数据吗?小白,麻烦详细点,有源码最好。
展开
 我来答
118218157
2017-09-17 · 超过17用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:30.6万
展开全部
读取/写入文件可以用FileStream,保存结构体数据可以用序列化,也可以建一个byte数组然后手动把结构体中的每个字段用BitConverter转换成byte[],再拷贝到之前建的byte数组里。
Tech_Monkeye5
2017-09-17 · TA获得超过984个赞
知道小有建树答主
回答量:330
采纳率:92%
帮助的人:80.7万
展开全部
追加存入文件其实并非所谓的“打开文件”,因为这里所谓的打开文件是有歧义的,怎么算打开?将文件流中的内容写入到内存中,还是只是打开文件流,并没有将文件内容写入到内存中?
如果单就C#术语所谓的打开而言,其实只是打开文件句柄,或者你可以理解为只打开了流而已。而追加文件其实是把指针的指向了文件尾而已,换句话来说,在C#中,打开文件只是打开文件流,并没有把流中的数据读取到内存中,如果需要把文件内容读取到内存中,则使用文件流进行读取,这就是所谓的在用户看来的打开(用户可以使用软件或应用查看文件内容,说明内容已经流入到内存流中)。所以打开文件流并没有直接将文件流中的内容加载到内存中。
一般而言对于结构体或类的数据进行存储时,我们可以考虑序列化(将对象或结构体内容序列化成流内容,可以是二进制流、文本流或xml/json之类,这根据序列化类型来定的),然后在使用时我们可以直接把内容反序列化即可。
换句话来说,假设存在一个结构体A,你要保存A的所有数据时,你需要一个个地说A的属性,属性,类型,如果A的某个属性是另外一个结构体的话,你还需要对另一个结构体进行记录,而这个步骤,其实就是序列化,序列化结构能说类型,属性,属性值等等,然后在使用时再反过程(这个过程就是反序列化)。
以xml序列化为例:
<?xml version="1.0" ?>
<Person>
<Name>Tech_Monkey</Name>
<Age>22</Age>
</Person>
这个和类
private class Person
{
public string Name{get;set;}
public int Age{get;set;}
}
这两个有多么相似呢?
其实使用xml序列化一个Person对象(如姓名年龄),这个xml与类对应的关系就是xml序列化(把对象变为xml流),或反序列化(把xml流变成Person对象)。

这个原理就是这样了,至于xml存在一个文本文件中或是单独成文件都可以,xml流可以是一个文件的一个片段。至于序列化方面,可以查询XmlSerializer类的使用,其他的序列化类型,可以查看查关序列化的方式,如DataJsonSerializer等等。

结构体或类的存储均可以使用该类方法,对于不同的序列化存在不同的方式与参数,比如xml序列时,可以把简单的属性序列化成元素或属性。
<Person Name="Tech_Monkey">
<Age>33</Age>
</Person>
这个就是把Name序列化成属性而把Age序列化成元素。

有关序列化的内容可以查看MSDN。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式