gpt4 book ai didi

vb.net - FileInfo返回错误的值?

转载 作者:行者123 更新时间:2023-12-03 08:28:54 24 4
gpt4 key购买 nike

好的,所以我在VB.NET中工作,手动将错误日志写入日志文件(是的,我知道,我没有打电话)。现在,如果文件超过任意大小,则该函数将要写出新的错误数据时,应使用新文件名启动一个新文件。

功能如下:

        Dim listener As New Logging.FileLogTraceListener
listener.CustomLocation = System.Configuration.ConfigurationManager.AppSettings("LogDir")
Dim loc As String = DateTime.UtcNow.Year.ToString + DateTime.UtcNow.Month.ToString + DateTime.UtcNow.Day.ToString + DateTime.UtcNow.Hour.ToString + DateTime.UtcNow.Minute.ToString

listener.BaseFileName = loc

Dim logFolder As String
Dim source As String

logFolder = ConfigurationManager.AppSettings("LogDir")
If ex.Data.Item("Source") Is Nothing Then
source = ex.Source
Else
source = ex.Data.Item("Source").ToString
End If

Dim errorFileInfo As New FileInfo(listener.FullLogFileName)

Dim errorLengthInBytes As Long = errorFileInfo.Length


If (errorLengthInBytes > CType(System.Configuration.ConfigurationManager.AppSettings("maxFileSizeInBytes"), Long)) Then

listener.BaseFileName = listener.BaseFileName + "1"

End If


Dim msg As New System.Text.StringBuilder
If String.IsNullOrEmpty(logFolder) Then logFolder = ConfigurationManager.AppSettings("LogDir")

msg.Append(vbCrLf & "Exception" & vbCrLf)
msg.Append(vbTab & String.Concat("App: AppMonitor | Time: ", Date.Now.ToString) & vbCrLf)
msg.Append(vbTab & String.Concat("Source: ", source, " | Message: ", ex.Message) & vbCrLf)
msg.Append(vbTab & "Stack: " & ex.StackTrace & vbCrLf)


listener.Write(msg.ToString())
listener.Flush()

listener.Close()

我出于测试目的在循环中执行此操作,因此我可以看到它一次总共收到(例如)10000个错误时会发生什么。同样,我知道有更好的系统地处理此问题的方法,但这是我被告知要实现的代码。

如我上面所述,如何在写入日志文件之前可靠地获取其大小?

最佳答案

嗯,与许多事情一样,答案是“您是否仔细阅读了自己的代码”,并附带了“吃点东西,您需要固定血糖的信息”。

回顾时,我发现我一直在检查BaseFileName,如果超出了任意限制,则附加一个字符并写入该文件。我没有做的就是检查该文件或其他最近的文件是否存在。我已经解决了这个问题,方法是在Directory.GetFiles中获取与“BaseFileName *”参数匹配的所有文件的目录列表,然后选择最近访问的文件。这样可以确保记录器始终选择要写入的最新文件,或者(如有必要)用作其他附加字符的基本名称。

这是代码:

        Dim directoryFiles() As String = Directory.GetFiles(listener.Location.ToString(), listener.BaseFileName + "*")

Dim targetFile As String = directoryFiles(0)

For j As Integer = 1 To directoryFiles.Count - 1 Step 1
Dim targetFileInfo As New FileInfo(targetFile)
Dim compareInfo As New FileInfo(directoryFiles(j))

If (targetFileInfo.LastAccessTimeUtc < compareInfo.LastAccessTimeUtc) Then
targetFile = directoryFiles(j)
End If
Next


Dim errorFileInfo As New FileInfo(listener.Location.ToString() + targetFile)
Dim errorLengthInBytes As Long = errorFileInfo.Length

关于vb.net - FileInfo返回错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com