为了账号安全,请及时绑定邮箱和手机立即绑定

写入后获得准确的流位置

写入后获得准确的流位置

C#
慕神8447489 2021-03-30 13:14:50
FileStream.Position使用后检查StreamWriter.Write(),我在给定值中存在一些不准确性,已针对产生的文件和使用的字符串的长度进行了验证:string MyText = "\"aaqnt - bra\"\t\"kkaaknc qzxukrnt\"\t\"kkaaknc qzx xrrqtrq zn\"\t\"arhkxar kq Nz.\"\t\"qkstrkkutkzn xhqnnra\"\t\"knazkxr xqtrczra\"\t\"arhkxar Nrt arkxr\"\t\"qkzNrtarkxr\"\t\"TztaqTqkzunt\"\t\"aqT %\"\t\"Nrtknazkxrqkzunt\"\r\n\"8009\"\t\"9000099989\"\t\"9098-09-99\"\t\"kHbkF09F9Hb009890\"\t\"09\"\t\"k\"\t\"09,000\"\t\"\"\t\"9,000\"\t\"0.00%\"\t\"00,000\"\r\n\"8008\"\t\"9000099009\"\t\"9098-09-99\"\t\"Rbakk9Hr9J0999098\"\t\"09\"\t\"k\"\t\"99,900\"\t\"\"\t\"0,990\"\t\"0.00%\"\t\"98,990\"\r\n\"8008\"\t\"9000099999\"\t\"9098-09-99\"\t\"JTNk99Hb9J0009899\"\t\"09\"\t\"k\"\t\"99,800\"\t\"\"\t\"9,990\"\t\"0.00%\"\t\"98,990\"\r\n\"8008\"\t\"9000090988\"\t\"9098-09-99\"\t\"Rbakk9Hr9J0999098\"\t\"09\"\t\"k\"\t\"99,900\"\t\"\"\t\"0,990\"\t\"0.00%\"\t\"98,990\"\r\n\"8000\"\t\"9000090990\"\t\"9098-09-99\"\t\"JTNk99Hb9J0090909\"\t\"09\"\t\"k\"\t\"99,999\"\t\"\"\t\"9,899.90\"\t\"0.00%\"\t\"99,090.90\"\r\n\"8000\"\t\"9000090099\"\t\"9098-09-99\"\t\"kR0xW8kk8J0099900\"\t\"09\"\t\"k\"\t\"99,900\"\t\"\"\t\"9,900\"\t\"0.00%\"\t\"09,000\"\r\n\"8000\"\t\"9000090900\"\t\"9098-09-99\"\t\"JTNk99Hb9J0099098\"\t\"09\"\t\"k\"\t\"99,800\"\t\"\"\t\"9,990\"\t\"0.00%\"\t\"98,990\"\r\n\"8000\"\t\"9000090000\"\t\"9098-09-99\"\t\"kHFk99F00J9099009\"\t\"09\"\t\"k\"\t\"99,900\"\t\"\"\t\"9,990\"\t\"0.00%\"\t\"09,090\"\r\n\"8000\"\t\"9000090090\"\t\"9098-09-int TextLengthInBytes = Encoding.UTF8.GetByteCount(MyText); // 5127.FileStream Nonsense = new FileStream("D:\\180415_21569.txt", FileMode.CreateNew, FileAccess.Write, FileShare.None);StreamWriter Insanity = new StreamWriter(Nonsense, Encoding.UTF8);Insanity.Write(MyText); // Position 0 => 5123.Insanity.Flush();Nonsense.Dispose();使用此示例字符串,差异(5123)比正确值(5127)小4。用我的原始字符串,它少了7个(5120)。我想知道造成这种差异的原因,以及解决该差异的可能性。似乎与默认缓冲无关,因为结果值有时是奇数,而不是偶数,并且是在进行微跳转。我正在考虑将GetByteCount上面显示的作为跟踪真实位置的一种替代方法,尽管它与实际的兴趣点/代码有所不同,并假设这些值始终相等,并且很可能是完全临时的。
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您是在调用Flush()之前还是之后获得职位的?我认为这就是问题所在。在Flush()之前,不能保证所有内容都已写入。


查看完整回答
反对 回复 2021-04-24
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信