none
C#操作文件 RRS feed

  • 问题

  • 我想将自己写的一个类的List保存到一个文件中,由于其中包含大量的string类型的属性,所以存储的二进制数据长度不一致;而我又希望能够像操作数据库一样去操作这个文件,比如删除一条记录,插入一条记录,这有什么好的方法实现吗?
    2010年5月21日 0:44

答案

  • 可以用以下类型操作 XML:

    System.Xml.XmlDocument
    System.Xml.Linq.XDocument

    不依赖数据库执行引擎的数据库当然不存在了。不过,基于轻量级执行引擎的 SQL Server Compact 数据库您倒是可以考虑。它基于 sdb 二进制文件的。


    Mark Zhou
    • 已标记为答案 漫步者 2010年5月24日 9:23
    2010年5月24日 9:06

全部回复

  • 简单点的就用xml 来存储

    用.net的XmlDocument或XmlNagivator来控制xml的数据

    • 已标记为答案 KeFang Chen 2010年5月24日 2:30
    • 取消答案标记 漫步者 2010年5月24日 7:25
    2010年5月21日 1:12
  • 你好!

         可以把List直接序列化为Xml文件,具体可以参考:

    http://hi.baidu.com/guigangsky/blog/item/7ad064a7f773e292d043585f.html

          希望对你有帮助!


    周雪峰
    2010年5月21日 1:35
    版主
  • 序列化为XML文件也不能实现删除其中的一条记录而不影响其它记录吧,而且老师要求最好是保存成二进制的文件
    2010年5月21日 9:28
  • 用 XML 当然可以方便的进行 CRUD 了。包括删除。

    如果是要保存二进制文件的话,也容易,用一个 System.Runtime.Serialization.Formatters.BinaryFormatter 把您的类型二进制序列化然后写到文件就可以了。读取时,对其反序列化后,直接用 C# 的方法进行 CRUD,这个方法是最简单的。但是,好像失去了这个作业的目的。


    Mark Zhou
    • 已标记为答案 KeFang Chen 2010年5月24日 2:30
    • 取消答案标记 漫步者 2010年5月24日 7:25
    2010年5月21日 9:52
  • CRUD是什么?

     

    2010年5月21日 10:01
  • CRUD = Create, Update and Delete。即中文常说的“增删改”。
    Mark Zhou
    2010年5月21日 10:14
  • 你好!

         序列化为二进制文件就可以了!


    周雪峰
    2010年5月21日 10:24
    版主
  • 怎么实现呢?保存后的长度不一致,也不好用文件指针寻址 啊?
    2010年5月21日 12:15
  • 你好!

         你序列化之后想取回数据的话,直接反序列化,而不是操作二进制文件!如果要保存成二进制的文件,就很难对其直接进行增删改了,实际上二进制文件已经涉及不到什么长度是否一致的问题了!

         另外一个建议,直接保存在数据库表里,可以满足你一切需要!


    周雪峰
    • 已标记为答案 KeFang Chen 2010年5月24日 2:30
    • 取消答案标记 漫步者 2010年5月24日 7:25
    2010年5月21日 13:05
    版主
  • 难道你们的意思是每次保存都重写整个文件?
    2010年5月24日 7:25
  • 你好!

         如果你保存成二进制文件和文本文件,肯定是每次都需要重写文件的!这个和文件结构有关

         如果保存成XML文件或数据库,就不用每次重写整个文件了,所以我一直建议你保存成XML文件或直接存在数据库里!


    周雪峰
    2010年5月24日 8:08
    版主
  • XML的话要用哪个类来操作?如果保存成数据库,能不能不依托一个数据库系统而直接使用文件?
    2010年5月24日 8:24
  • 可以用以下类型操作 XML:

    System.Xml.XmlDocument
    System.Xml.Linq.XDocument

    不依赖数据库执行引擎的数据库当然不存在了。不过,基于轻量级执行引擎的 SQL Server Compact 数据库您倒是可以考虑。它基于 sdb 二进制文件的。


    Mark Zhou
    • 已标记为答案 漫步者 2010年5月24日 9:23
    2010年5月24日 9:06
  • 呵呵,多谢指导了
    2010年5月24日 9:23