4

我有这个写入我的日志文件的函数。它正在默默地失败。因为此函数中没有引发错误,它只是无法创建或写入文件。我正在尝试写信给%TEMP%\myappname.log. 它也失败了%USERPROFILE%\Desktop\myappname.log。服务器是 Windows Server 2008 R2 标准。我在使用其他程序写入应用程序文件夹时遇到了这种情况,因此转而写入%TEMP%目录,这解决了它。但是这个系统甚至不允许我写入%TEMP%目录。是的,我也尝试以管理员身份运行,但没有帮助。在这种情况下,%TEMP% 解析ExpandEnvironmentStringsC:\Users\sa\AppData\Local\Temp\2 So g_strLogPath is C:\Users\sa\AppData\Local\Temp\2\myappname.log

Public Function LogMessage(ByVal strInput As String, Optional ByVal blnDate As Boolean = False) As Boolean

   Dim intFileNumber As Integer

   On Error GoTo ErrorHandler

   If g_lngLogLevel <> 1 Then
      Exit Function
   End If

   If Len(g_strLogPath) = 0 Then
      SetLogPath
   End If

   If blnDate Then
      strInput = Format(Now, cstrLogDateFormat) & " : " & strInput
   End If

   intFileNumber = FreeFile
   Open g_strLogPath For Append As #intFileNumber
   Print #intFileNumber, strInput
   Close #intFileNumber

   LogMessage = True

   Exit Function

ErrorHandler:

   MsgBox _
      "Error: " & Err.Number & vbCrLf & _
      "Location: Module1.LogMessage" & vbCrLf & _
      "Line: " & Erl & vbCrLf & _
      Err.Description, vbExclamation + vbOKOnly

End Function
4

3 回答 3

5

尝试这个

Sub GetTmpPath()
    'This will give the Temp Path
    MsgBox IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))
End Sub

因此,您可以尝试将其用作

    Ret = IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))

    g_strLogPath = Ret & "\Sample.Log"

    Open g_strLogPath For Append As #intFileNumber
于 2012-05-03T20:56:44.117 回答
0

尝试使用GetTempPath而不是Environ$("TEMP")获取临时文件夹。

如果当前用户在 TEMP 文件夹中没有写入权限,许多系统组件也会失败。

于 2012-05-03T20:42:20.107 回答
0

问题是日志级别检查。它实际上从未涉及到 open 或 print 语句。

我定义了三个日志级别 0 = 无日志 1 = 一切 2 = 仅错误

它被设置为 2 并且 LogError 调用了 LogMessage 来检查 loglevel <> 1 并且因此从未运行过。

于 2012-05-03T21:50:42.133 回答