在%TEMP%中写入文件无提示失败

时间:2012-05-03 20:28:08

标签: vba vb6 windows-server-2008

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试使用GetTempPath代替Environ$("TEMP")来获取临时文件夹。

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

答案 2 :(得分:0)

问题是loglevel检查。 它实际上从未涉及公开或印刷声明。

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

它被设置为2 LogError调用了LogMessage,它检查了loglevel&lt;&gt; 1因此从未跑过。