VB.NET以二进制模式读取文本文件时空格被忽略问题求解
问题原因
你遇到的空格丢失问题和二进制打开模式无关,核心原因是调用的FileSystem.InputString方法存在隐式解析逻辑:
- 这个方法是为了兼容VB6时代的结构化文本读取设计的,本身就不是用来原样读取全量文件内容的
- 该方法默认会把连续半角空格识别为字段分隔符,读取时自动跳过对应位置的空格,哪怕文件是以
OpenMode.Binary模式打开,这个解析逻辑依然会生效,最终导致你读到的内容缺失原文件中的空格。
正确修改方案
根据你的使用场景选任意一种即可,两种方案都能完整保留文件里的所有空格:
方案1:保留原有VB兼容库的代码结构
把InputString替换为二进制字节读取逻辑,不要用带解析规则的字符串读取方法:
Dim hInFile As Integer Dim fileBuffer() As Byte hInFile = FileSystem.FreeFile() FileSystem.FileOpen(hInFile, Filename, OpenMode.Binary) ' 按文件实际长度初始化字节数组,注意数组下标从0开始所以长度减1 ReDim fileBuffer(FileSystem.LOF(hInFile) - 1) ' 读取全量字节到数组,不会做任何字符过滤 FileSystem.FileGet(hInFile, fileBuffer) FileSystem.FileClose(hInFile) ' 按照文件实际的文本编码把字节数组转成字符串即可,常用编码为UTF8、GBK、系统默认编码 result = System.Text.Encoding.Default.GetString(fileBuffer)
方案2:使用.NET原生标准API(推荐)
不需要使用旧版VB兼容函数,直接调用.NET内置的文件读取方法,没有任何隐式解析逻辑,代码更简洁:
' 手动指定文件对应编码读取即可,例如下方是指定GBK编码读取的写法 result = System.IO.File.ReadAllText(Filename, System.Text.Encoding.GetEncoding("GBK")) ' 如果是UTF8编码文件,替换编码参数为System.Text.Encoding.UTF8即可
注意:如果没有特殊字节处理需求,不需要特意用二进制模式打开文本文件,直接用文本读取API是出错概率最低的方案。
内容的提问来源于stack exchange,提问作者shubham
相关产品推荐
相关产品推荐

