Dot-Net
IO.FileNotFoundException 但文件應該存在
FileNotFoundException儘管我確定該文件存在,但我感到很驚訝。我只是想將 Logfiles(
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上,LogFile是IO.FileInfo-onject: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實際上 ,帶有Refresh的@ShellShocks 解決方案很簡單。從來沒有聽說過這個功能,奇怪的是當我不刷新文件時我得到一個 FileNotFoundException 。
Me.Log.LogFile.Refresh()
嘗試在 FileInfo.Exists 或 FileInfo.Length 之前呼叫FileInfo.Refresh——這些屬性可能被記憶體,因此 Refresh 將獲取最新值。