.net - IO.FileNotFoundException 但文件应该存在

标签 .net vb.net file io

我得到了一个惊喜FileNotFoundException虽然我确定该文件存在。

我只是想添加日志文件(IO.FileInfo)作为电子邮件的附件,因此我尝试检查每个文件的长度以检测是否必须添加/压缩它们。
如果这些文件已经存在 就可以了.
但是如果我在这次运行中创建了它们,当我尝试检查长度时我会遇到异常。奇怪的是,我可以在前一行毫无问题地写入这些“不存在”的文件(实际上 FileInfo.Exists 返回 false )。

这是一些代码...

在名为 Log 的类的构造函数中创建文件之一:

Me.LogFile = New IO.FileInfo(infoLogPath)
If Not LogFile.Exists() Then
   'tried to use `Using` on the Stream but that doesn't change anything'
   Using stream = Me.LogFile.Create()
       'close and dispose implicitely
   End Using
End If

我可以毫无问题地写入文件:
Me.Log.WriteInfo("BlahBlahBlah...", False)

在我得到 LogFile.Length 异常之后的一行:
If Me.Log.LogFile.Length <> 0 Then
    files.Add(Me.Log.LogFile)
End If
Me.Log是一个名为 Log 的自定义日志记录类对象包含对 FileInfo 的引用目的。

这是WriteInfo在类里面Log , LogFileIO.FileInfo -项目:
Public Sub WriteInfo(ByVal message As String, ByVal finishLog As Boolean)
    Try
        Using w As IO.StreamWriter = Me.LogFile.AppendText
            If Me.WithTimestamp Then
                w.WriteLine(Date.Now.ToString(Globalization.CultureInfo.InvariantCulture) & ": " & message)
            Else
                w.WriteLine(message)
            End If
            If finishLog Then w.WriteLine("__________________________")
            w.Flush()
            w.Close()
        End Using
    Catch writeLogException As Exception
        Try
            WriteError(writeLogException, True)
        Catch innerEx As Exception
            'ignore
        End Try
    End Try
End Sub

其实@ShellShocks solutionRefresh很简单。从来没有听说过这个功能,奇怪的是当我不刷新文件时我得到一个 FileNotFoundException 。
Me.Log.LogFile.Refresh()

最佳答案

尝试调用FileInfo.Refresh在 FileInfo.Exists 或 FileInfo.Length 之前——这些属性可能会被缓存,因此 Refresh 将获取最新值。

关于.net - IO.FileNotFoundException 但文件应该存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939893/

相关文章:

C编程: Sorting a integer file while keeping their original place in file

c# - 检测到包将 : Microsoft. NETCore.App 从 2.1.3 降级到 2.1.0

.net - Silverlight:TargetType 的多个值?

c# - VB.NET 和 C# 中的日期时间

javascript - Button Click 如何触发 httphandler Asp.net

iphone - 从应用程序包读取文本文件

mysql - 周期性 MySql 超时,然后是 ASP.NET 网站中的连接峰值

c# - 无法正确单步执行静态构造函数中的代码(VS2019、C#、.NET 4.7.2)

mysql - Visual Studio MySQL 在运行时未定义

c++ - 按行解析和排序 csv 文件