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

VB.NET读取文件所有行却仅写入最后一行的问题排查

问题原因及修复方案

核心错误点

  1. 文件读取方式错误
    File.ReadLines(fileName)返回的是延迟加载的IEnumerable(Of String),你直接将其赋值给String()类型变量,在VB中这会导致仅读取第一行数据,后续循环无法遍历剩余行。

  2. 换行符重复添加
    调用WriteToFile时手动追加了vbNewLine,同时StreamWriter.WriteLine方法会自动添加换行符,导致文件中出现多余空行。

  3. 频繁IO操作(非致命但不规范)
    每次调用WriteToFile都重复打开、关闭文件句柄,不仅效率低,还存在潜在的文件锁定风险。


修复后的代码示例

方案1:修正读取逻辑并优化写入方法

Dim fileEntries As String() = Directory.GetFiles(path)

For Each fileName As String In fileEntries
    WriteToFile("fileName: " + fileName)  ' 移除手动添加的vbNewLine
    Dim lines() As String = File.ReadAllLines(fileName)  ' 改用ReadAllLines一次性读取所有行
    For Each line As String In lines
        WriteToFile(line)  ' 移除手动添加的vbNewLine
    Next
Next

优化WriteToFile方法,利用Using块自动管理文件资源:

Public Sub WriteToFile(StrToWrite As String)
    Using stream As New IO.StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyFile.txt"), True)
        stream.WriteLine(StrToWrite)
    End Using  ' 自动完成Flush、Close操作
End Sub

方案2:高效批量写入(推荐)

一次性打开输出文件,批量写入所有内容,避免频繁IO操作:

Dim outputFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyFile.txt")
Using outputStream As New IO.StreamWriter(outputFilePath, True)
    Dim fileEntries As String() = Directory.GetFiles(path)
    For Each fileName As String In fileEntries
        outputStream.WriteLine("fileName: " + fileName)
        ' 直接遍历File.ReadLines结果,无需转换为数组
        For Each line As String In File.ReadLines(fileName)
            outputStream.WriteLine(line)
        Next
    Next
End Using

内容的提问来源于stack exchange,提问作者Privesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:31