Я получаю удивительное 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
, LogFile
является IO.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 решение с Обновить было простым. Никогда не слышал об этой функции, странно, что я получаю исключение FileNotFoundException, когда не обновляю файл.
Me.Log.LogFile.Refresh()