使用TStringList读取文件只读取到一半是怎么回事

时间:2021-02-25 04:23:14
读取某些TXT时,只读了前一半,后面的没了,如果我用记事本打开TXT,什么都不做,直接文件-》保存,就可以了,我用16进制打开看到的是一样的呀,有知道这是怎么回事吗?并且没保存前怎么读全呢?

10 个解决方案

#1


比较下读取完全的和不完全的文件之间的区别,大小或者带有特殊符号。

#2


有可能与TXT文件的换行格式有关,可以分别试一下读DOS格式、UNIX格式和MAC格式的情况,然后再试一下混合格式
如没问题的话在检查一下有没有特殊字符

#3


找到原因,只在之前中间有\0,用记事本打开在保存,这些\0就没了,有什么办法替换掉这些\0吗

#4


文本文件里没结束就出现了结束符\0,这个要怎么样替换掉呢?

#5


你这个文件不是文本文件吧,要不然里面怎么会有\0呢,或者编码不对?

#6


文件后半部分还没有保存

#7


这个是别人导出的文本文件,里面有我需要的描述信息,用十六进制查看的时候在中间地方就是有\0的存在,所以我用TStringList加载的时候只加载了前半部分,有什么办法解决吗?

#8


先读取到 TMemoryStream 流,逐个字节判断是否 0x00 就改为 0x20 (空格),


再 TStringList-〉LoadFromStream 装入这个流。

#9


谢谢楼上的回复,我现在就是这么做的,循环流判断的时候怎么直接替换流里的内容呢?比如流长度20,10的位置就是\0
我现在的做法是,循环判断不是\0就加到另一个字符串,然后最后显示另一个字符串。有什么办法直接修改流里的内容呢?

#10


打开文件,直接都读到内存中,然后进行替换,把'\0'都替换成空格,然后在用TStringList去读进行了,或者不用TStringList,直接处理也行

#1


比较下读取完全的和不完全的文件之间的区别,大小或者带有特殊符号。

#2


有可能与TXT文件的换行格式有关,可以分别试一下读DOS格式、UNIX格式和MAC格式的情况,然后再试一下混合格式
如没问题的话在检查一下有没有特殊字符

#3


找到原因,只在之前中间有\0,用记事本打开在保存,这些\0就没了,有什么办法替换掉这些\0吗

#4


文本文件里没结束就出现了结束符\0,这个要怎么样替换掉呢?

#5


你这个文件不是文本文件吧,要不然里面怎么会有\0呢,或者编码不对?

#6


文件后半部分还没有保存

#7


这个是别人导出的文本文件,里面有我需要的描述信息,用十六进制查看的时候在中间地方就是有\0的存在,所以我用TStringList加载的时候只加载了前半部分,有什么办法解决吗?

#8


先读取到 TMemoryStream 流,逐个字节判断是否 0x00 就改为 0x20 (空格),


再 TStringList-〉LoadFromStream 装入这个流。

#9


谢谢楼上的回复,我现在就是这么做的,循环流判断的时候怎么直接替换流里的内容呢?比如流长度20,10的位置就是\0
我现在的做法是,循环判断不是\0就加到另一个字符串,然后最后显示另一个字符串。有什么办法直接修改流里的内容呢?

#10


打开文件,直接都读到内存中,然后进行替换,把'\0'都替换成空格,然后在用TStringList去读进行了,或者不用TStringList,直接处理也行