IO.FileNotFoundException, но файл должен существовать

Я получаю неожиданное 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 -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

Фактически @ Решение ShellShocks с Refresh было простым. Никогда не слышал об этой функции, странно, что я получаю исключение FileNotFoundException, когда не обновляю файл.

Me.Log.LogFile.Refresh()

7
задан Community 23 May 2017 в 12:09
поделиться