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

为何我的项目中System.IO.StreamWriter代码被跳过?

问题根源

你遇到的问题核心是VB里的+运算符在混合数值与字符串时,会优先尝试数值运算而非字符串拼接。

看你拼接record的代码:

Dim record As String = ID + delimiter + name + delimiter + cost + delimiter + type + delimiter + wear + delimiter + availability

ID是Integer类型,delimiter是字符串(逗号),VB会尝试把逗号转换成数值类型(比如Double)来做加法,这显然会失败。之前的Try-Catch捕获了这个异常,所以代码直接跳过了写入逻辑,只在控制台输出"fail",但你没察觉到异常发生,才误以为是跳过了写入。

解决方案

把所有字符串拼接的+换成VB专用的字符串连接运算符&,它会强制把所有操作数转为字符串再拼接:

Dim record As String = ID & delimiter & name & delimiter & cost & delimiter & type & delimiter & wear & delimiter & availability

额外优化建议

  1. 用Using语句管理StreamWriter:自动释放文件资源,避免忘记Close或者异常时资源泄漏:
Using fileWriter As New System.IO.StreamWriter(filepath, True)
    Dim record As String = ID & delimiter & name & delimiter & cost & delimiter & type & delimiter & wear & delimiter & availability
    fileWriter.WriteLine(record)
End Using
  1. InputBox输入验证:InputBox返回的是字符串,直接转Integer如果用户输入非数字会报错,建议加验证:
Dim costStr As String = InputBox("Cost of instrument")
Dim cost As Integer
If Not Integer.TryParse(costStr, cost) Then
    MessageBox.Show("请输入有效的仪器价格")
    Return
End If
  1. Catch块输出具体异常信息:方便调试,不要只输出"fail":
Catch ex As Exception
    Console.WriteLine($"写入失败:{ex.Message}")
    MessageBox.Show($"写入文件出错:{ex.Message}")
End Try

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:23