Me sorprende FileNotFoundException
aunque estoy seguro de que el archivo existe.IO.FileNotFoundException pero el archivo debería existir
Simplemente quería agregar archivos de registro (IO.FileInfo
) como archivos adjuntos a un correo electrónico, por lo tanto, traté de verificar la longitud de cada archivo para detectar si se deben agregar/comprimir. Esto funciona bien si estos archivos ya existen. Pero si los he creado en esta ejecución, obtengo una excepción cuando trato de verificar la longitud. Curiosamente, puedo escribir en estos archivos "no existentes" (en realidad, FileInfo.Exists
devuelve false
) sin problema alguna línea anterior.
Aquí hay un código ...
Creación de uno de los archivos en el constructor de una clase llamada 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
Puedo escribir en el archivo sin ningún problema:
Me.Log.WriteInfo("BlahBlahBlah...", False)
Una línea después de obtener la excepción en LogFile.Length
:
If Me.Log.LogFile.Length <> 0 Then
files.Add(Me.Log.LogFile)
End If
Me.Log
es un objeto de clase de registro personalizado denominado Log
que contiene la referencia al objeto FileInfo
.
Ésta es WriteInfo
en clase Log
, LogFile
es el 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
En realidad @ShellShocks solution con Refresh era simple. Nunca he oído hablar de esta función, es extraño que obtenga una excepción FileNotFoundException cuando no actualizo el archivo.
Me.Log.LogFile.Refresh()
¿D es la unidad asignada o la unidad física? – kleinohad
¿Qué tipo de aplicación es esta - Servicio de Windows? ASP.NET? – Yahia
'D' es una unidad física, este código no funciona en un servidor Win2008 ni en mi pc de desarrollo (Win XP). Ambos tienen este impulso físico. Este será un servicio de Windows, pero hasta ahora, con fines de prueba, es una aplicación de WinForm con solo un botón de inicio. –