吐槽:绝望的C#:文本流StreamWriter StreamWriter无法正确定位

初级代码游戏的专栏介绍与文章目录-CSDN博客

        这两天用C#写文件处理的程序,发现一个大BUG:

        StreamWriter和StreamWriter的Seek和Position是很奇葩的。

        文本文件如果用UTF-8格式,会被添加三字节的BOM,就是这三个字节引出了无穷问题。似乎是想兼容原来没有BOM的操作方式导致的,似驴似马,非驴非马,时驴时马。

目录

新建文件写数据

Seek(0)再写

关了文件重开再Seek(n)写

读文件的Position是读到缓存的位置

不确定的问题


新建文件写数据

        新建文件,Position是0,写入两个字节,Position是5,因为写了BOM嘛,可以理解。

Seek(0)再写

        BOM没有了,从第一个字节开始覆盖,因此重新写入的数据与之前相比错位了三个字节,可以理解,但是不科学嘛,你不会保证文件开始处有三个字节的BOM吗?为什么新建文件写你就知道写BOM呢?

关了文件重开再Seek(n)写

        好嘛!在文件中间又写一次BOM,合着你是第一次写自动加BOM啊?后面就不加了啊?你不看文件位置的吗?

读文件的Position是读到缓存的位置

        读文件的Position就更奇葩了,大概他们压根没想过会有人在文本文件里来回读吧,这个Position的值是读到缓存的位置,而不是你获取的位置,所以如果你用Position来记录读取到的位置你就傻了。

不确定的问题

        观察到有时候读的Position比实际的少了3,也可能我搞错了,因为后来我放弃了,改用ASCII了,这样就没有BOM的问题。反正写文件、读文件的都是我,我可以把内容都转码成ASCII。

(这里是结束)

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值