怎么我用stringlist之后,再存入二进制文件里,读取的时候怎么读不出来呢?会出现内存错误呢。

解决方案 »

  1.   

    stringlist是不定长的,你怎么读,除非你要额外保存一个stringlist的长度的字段,然后读取时,根据这个长度去读
      

  2.   

    可以使用的,使用之前一定要创建实例 str:=TStringlist.create;
    上点代码,不知道你是怎么用的?
      

  3.   

    记录中可以存在任何类型的变量,但是除了几种基本类型之外,存储的都是地址,也就是说你的记录中的TStrings,哪怕已经创建了实例,但是这个实例不是顺序存储在记录中的,而是实例的地址存储在记录中,当你保存的时候,事实上保存的是这个实例的地址,所以当你读取的时候就会出现内存错误。
      

  4.   

    我猜楼主估计是把记录类型强行转OBJECT了吧?(话说我觉得可能会编译错)因为StringList的Object属性,只能用于保存指针类型的数据,长度为4字节,如果真个能把RECORD强行记录进去,自然会早成数据丢失,且读出来的东西是乱七八糟的。解决方法也很简单,既然上面已经说了这是个保存指针类型的属性,你只需要再给记录类型定义一个指针类型,把指针转换成对象就能保存进StringList的Object属性中了。当然取出来的是时候也要注意转回原来的类型
      

  5.   

    看错了- - 是RECORD里不能有STRINGLIST,不是STRINGLIST里不能有RECORD你保存是怎么保存?直接用记录模式保存进文件是肯定不行的,因为记录中只保存了STRINGLIST的指针,你重新读出来后自然什么都没有。解决方法是:自己实现一个序列化和反序列化的规则。意思就是说,自己制定一个保存该RECORD的规则,里面自己手动写代码按一定的格式把STRINGLIST的内容也保存进文件中(序列化)。读出来的时候,根据你保存规则的逆操作,把文件内容重新解释成RECORD(反序列化)就行了。
      

  6.   

    stringlist有点类似字符串数组,如果要用Record结构保存,stringlist,使用一连串STRING(定长)。
      

  7.   

    那请问如何对TstringList对象进行序列化呢,大哥请帮帮忙啊,我也遇到这样的问题,不知道怎么解决呢?
      

  8.   

    应该是没有读取的时候没有创建TStringList实例 ,即 TStringList.create() ;new(youRec) ;youRec.sl := TStringList.create() ;
      

  9.   

    record中可以有tstringlist,但要手动读写stringlist里的内容,我的做法是将stringlist内在单独保存到文件..
      

  10.   

    想要简单的序列化的话,还是用 jit 的或者脚本语言吧
      

  11.   

    没结扎吧,我给你补充一个RECORD,只能建立基本数据类型的记录,不能放 指针 或 类因为类的数据类型其实就是一个指针,指向某一内存地址.所以储存的时候,你储存的是内存地址,当你再打开的时候,由于数据的内存地址不一定一样,或者指向的内存地址不是 这个类,或者这个数据,就出错了!!Record只能建立基本数据类型的记录
      

  12.   

    再给你补充一点,有分就给些吧.如果你硬要保存 Record 到文件最好多做个函数把 里面的TStringlist也储存一下
    TStringlist.savetofile('filename');还是很方便的