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

PowerShell中StreamWriter.WriteLine写入文件中断问题求助

PowerShell StreamWriter 写入文件内容不完整的修复方案

问题原因

[System.IO.StreamWriter] 默认采用缓冲机制写入数据,若未主动刷新缓冲区或关闭流,缓冲区中剩余的未写入数据会丢失,导致文件内容截断。而Add-Content内部会自动处理流的打开、刷新和关闭逻辑,因此不会出现这类问题。

两种可靠的解决方法

方法1:用try/finally手动管理流生命周期

通过手动调用Flush()和Close()/Dispose(),确保所有数据都写入文件:

# 获取按HandleCount降序排列的进程列表
$sortedProcesses = Get-Process | Sort-Object -Property HandleCount -Descending

# 初始化StreamWriter
$writer = New-Object System.IO.StreamWriter -ArgumentList "D:\ProcessSorted.txt"

try {
    foreach ($proc in $sortedProcesses) {
        # 自定义输出格式,可根据需求调整
        $outputLine = "PID: $($proc.Id) | 进程名: $($proc.ProcessName) | 句柄数: $($proc.HandleCount)"
        $writer.WriteLine($outputLine)
        
        # 可选:大文件场景下可每写入一行就刷新一次缓冲区
        # $writer.Flush()
    }
}
finally {
    # 必须执行:关闭流并释放资源,强制写入剩余缓冲数据
    $writer.Close()
    $writer.Dispose()
}

方法2:用using语句自动管理流(推荐)

PowerShell支持using块,代码块结束时会自动释放流资源,无需手动调用关闭方法:

$sortedProcesses = Get-Process | Sort-Object HandleCount -Descending

# using块会自动处理流的创建、使用和释放
using ($writer = New-Object System.IO.StreamWriter "D:\ProcessSorted.txt") {
    foreach ($proc in $sortedProcesses) {
        $outputLine = "PID: $($proc.Id) | 进程名: $($proc.ProcessName) | 句柄数: $($proc.HandleCount)"
        $writer.WriteLine($outputLine)
    }
}

验证方式

运行脚本后,用以下命令对比进程总数和文件行数:

# 获取进程总数
(Get-Process | Sort-Object HandleCount -Descending).Count
# 获取文件行数
(Get-Content "D:\ProcessSorted.txt").Count

两者数值一致则说明内容完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:49:53