IO.FileNotFoundException, но файл должен существовать - PullRequest
7 голосов
/ 04 августа 2011

Я получаю удивительное 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()

1 Ответ

6 голосов
/ 04 августа 2011

Попробуйте вызвать FileInfo.Refresh до FileInfo.Exists или FileInfo.Length - эти свойства могут быть кэшированы, поэтому при обновлении будет получено последнее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...