为何我的项目中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
额外优化建议
- 用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
- 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
- Catch块输出具体异常信息:方便调试,不要只输出"fail":
Catch ex As Exception Console.WriteLine($"写入失败:{ex.Message}") MessageBox.Show($"写入文件出错:{ex.Message}") End Try
内容的提问来源于stack exchange,提问作者Alessio Teoh
相关产品推荐
相关产品推荐

