Se eseguo l' analisi del codice, relativamente a questa funzione, che ritorna il testo di un file:
codice:
Private Function LeggeLogFile() As String
Dim LogFile As String
Try
Dim fs As FileStream = New FileStream(My.Settings.LogPath & "\LogFile.txt", _
FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim sr As StreamReader = New StreamReader(fs)
fs.Seek(0, SeekOrigin.Begin)
LogFile = sr.ReadToEnd()
sr.Close()
fs.Close()
Return LogFile
Catch ex As Exception
Return Nothing
End Try
End Function
ottengo tre avvisi:
Avviso 41 CA2000 : Microsoft.Reliability : Nel metodo 'frmMain.LeggeLogFile()' chiamare System.IDisposable.Dispose sull'oggetto 'fs' prima che tutti i relativi riferimenti siano esterni all'ambito.
e questo:
Avviso 43 CA2202 : Microsoft.Usage : L'oggetto 'fs' può essere eliminato più volte nel metodo 'frmMain.LeggeLogFile()'. Per evitare di generare System.ObjectDisposedException, è consigliabile chiamare Dispose su un oggetto non più di una volta
e questo:
Avviso 42 CA1822 : Microsoft.Performance : Il parametro 'this' (o 'Me' in Visual Basic) di 'frmMain.LeggeLogFile()' non è mai utilizzato. Contrassegnare il membro come static (o Shared in Visual Basic) o utilizzare 'this'/'Me' nel corpo del metodo o almeno una funzione di accesso delle proprietà, se appropriato.
Per cercare di rimediare al primo avviso ho pensato di modificare il codice così:
codice:
Private Function LeggeLogFile() As String
Dim LogFile As String
Dim fs As FileStream
Try
fs = New FileStream(My.Settings.LogPath & "\LogFile.txt", FileMode.Open, _
FileAccess.Read, FileShare.ReadWrite)
Dim sr As StreamReader = New StreamReader(fs)
fs.Seek(0, SeekOrigin.Begin)
LogFile = sr.ReadToEnd()
sr.Close()
Return LogFile
Catch ex As Exception
Return Nothing
Finally
fs.Close()
End Try
End Function
ma ottengo un ulteriore avviso che mi dice che la variabile fs (in Finally) viene utilizzata prima che le sia stato assegnato un valore.
Riguardo al secondo avviso proprio non vedo dove fs possa essere chiusa più volte.
Il terzo è letteralmente arabo...
Ty for any info