c#结构体数据的存取 10
请问如何存入文件和如何读取文件?存入文件为追加存入。每次存数据均打开文件,存入一组结构体数据。主要用来储存数据用,或者有更好的方式存数据吗?小白,麻烦详细点,有源码最好。...
请问如何存入文件和如何读取文件?存入文件为追加存入。每次存数据均打开文件,存入一组结构体数据。
主要用来储存数据用,或者有更好的方式存数据吗?小白,麻烦详细点,有源码最好。 展开
主要用来储存数据用,或者有更好的方式存数据吗?小白,麻烦详细点,有源码最好。 展开
2个回答
展开全部
追加存入文件其实并非所谓的“打开文件”,因为这里所谓的打开文件是有歧义的,怎么算打开?将文件流中的内容写入到内存中,还是只是打开文件流,并没有将文件内容写入到内存中?
如果单就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。
如果单就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。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询