【发布时间】:2018-06-08 16:43:10
【问题描述】:
我正在努力将 VB6 项目的一部分转换为 VB.Net,我遇到了一些代码段问题,因为我似乎无法在 VB.Net 中找到 VB6 代码的替代方案。这是现在有问题的代码块:
Public Sub ProcessError(ByVal strModule As String, ByVal strProcedure As String, _
ByVal strDescription As String, ByVal bLogError As Boolean, _
ByVal bShowError As Boolean, Optional ByVal strMsg As String)
On Error GoTo 100
Dim intFile As Integer: Dim strPathName As String
strPathName = AddBackSlash(gsLogPath) & gsErrLogName
If bLogError = True Then
If GetFileSize(strPathName) > gcuMaxLogFileSize Then
Call CopyFile(strPathName, strPathName & ".bak")
Call DeleteFile(strPathName)
End If
intFile = FreeFile
Open strPathName For Append As #intFile
Write #intFile, Format(Now, "MMM-DD-YYYY HH:MM:SS AMPM"), strModule, strProcedure, strDescription)
Close #intFile
End If
If bShowError Then
Call Prompt("Error occurred in " & strModule & vbCrLf & "Error Description :" & strDescription, 1, vbRed)
End If
Exit Sub
100:
Close #intFile
End Sub
所以我遇到的问题是:
Open strPathName For Append As #intFile
Write #intFile
Close #intFile
我知道我可能应该使用StreamWriter 对象来代替这些对象,但让我失望的是错误部分。如果抛出错误并转到 100 标记,如果尚未打开或创建 Close #intFile 将如何工作?
对于我在将其移植到这个转换过程中遇到的大多数其他转换烦恼,我最困惑的是,因此感谢您提供任何帮助。感谢您的宝贵时间。
【问题讨论】:
-
Disposable 类可以使用 Using-End Using 块,即使发生异常,它也会自动释放对象。不要使用 GoTo。请改用适当的 Try-Catch。
-
关于您关于
Close的问题,您的旧代码有效,因为如果引用的文件号未打开,Close #filenumber语句不会引发错误。如果文件号打开,则关闭,否则将保持关闭状态,不会出错。 -
@LarsTech 是的,我一直在将
GoTo块转换为正确的Try/Catch块以进行错误处理。关于您评论的第一部分,您是说我可以为StreamWriter设置一个Using块,如果出现错误,它会自动处理该对象? -
@Skitzafreak 是的。在幕后,一个 Using-End Using 块设置了一个 Try-Catch-Finally,它确实在 finally 分支中处理对象。
标签: vb.net vb6 vb6-migration