4

ログファイルに書き込むこの関数があります。黙って失敗しています。この関数でエラーが発生しないという点で、ファイルの作成または書き込みに失敗するだけです。に書き込もうとしてい%TEMP%\myappname.logます。また、で失敗し%USERPROFILE%\Desktop\myappname.logます。サーバーはWindowsServer2008R2Standardです。他のプログラムでアプリケーションフォルダに書き込むときにこれに遭遇したので、%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
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ステートメントに到達することはありませんでした。

3つのログレベルを定義しました0=ログなし1=すべて2=エラーのみ

これは2に設定され、LogErrorはLogMessageを呼び出し、loglevel <> 1であるかどうかをチェックしたため、実行されませんでした。

于 2012-05-03T21:50:42.133 に答える