You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:30:51