編集:
この質問は重複していません!おそらくよくある質問は「この警告はどういう意味ですか?」ですが、特定のコードで警告を修正する方法を尋ねているときは重複していません。警告の意味。–
VS でコードを分析すると、次の警告が表示されます。
CA2202 オブジェクトを複数回破棄しないでください オブジェクト 'OutputStream' は、メソッド 'FileSplitter.Split(String, Long, String, String, Boolean, Boolean)' で複数回破棄できます。System.ObjectDisposedException の生成を回避するには、オブジェクトに対して Dispose を複数回呼び出さないでください。 行: 490 WindowsApplication1 FileSplitter.vb 490
行490
は次のとおりです。
End Using ' OutputStream
そして、行の他のオブジェクトについても同じ警告が表示されます498
。これは次のとおりです。
End Using ' InputStream
しかし、Using
キーワードを適切に使用しており、オブジェクトを複数回破棄していないと思います。何か間違ったことをしている場合、どうすればコードを修正できますか?
これは完全なブロックです:
' Open the file to start reading bytes.
Using InputStream As New FileStream(fInfo.FullName, FileMode.Open)
Using BinaryReader As New BinaryReader(InputStream)
While (InputStream.Position < InputStream.Length)
' Create the chunk file to Write the bytes.
Using OutputStream As New FileStream(ChunkFile, FileMode.Create)
Using BinaryWriter As New BinaryWriter(OutputStream)
' Read until reached the end-bytes of the input file.
While (SizeWritten < ChunkSize) AndAlso (InputStream.Position < InputStream.Length)
' Some irrelevant code here...
End While ' (SizeWritten < ChunkSize) AndAlso (InputStream.Position < InputStream.Length)
OutputStream.Flush()
End Using ' BinaryWriter
End Using ' OutputStream
End While ' InputStream.Position < InputStream.Length
End Using ' BinaryReader
End Using ' InputStream
アップデート
try/catch ブロックを追加した後も、同じ警告が表示されます。最後の try/catch を削除すると、警告が 1 つだけ表示されます。
' Open the file to start reading bytes.
Dim InputStream As Stream = Nothing
Try
InputStream = New FileStream(fInfo.FullName, FileMode.Open)
Using BinaryReader As New BinaryReader(InputStream)
While (InputStream.Position < InputStream.Length)
' Create the chunk file to Write the bytes.
Dim OutputStream As Stream = Nothing
Try
OutputStream = New FileStream(ChunkFile, FileMode.Create)
Using BinaryWriter As New BinaryWriter(OutputStream)
' Read until reached the end-bytes of the input file.
While (SizeWritten < ChunkSize) AndAlso (InputStream.Position < InputStream.Length)
End Using ' BinaryWriter
Catch ex As Exception
Throw New Exception(ex.Message)
Finally
If OutputStream IsNot Nothing Then
OutputStream.Dispose()
End If
End Try
End While ' InputStream.Position < InputStream.Length
End Using ' BinaryReader
Catch ex As Exception
Throw New Exception(ex.Message)
Finally
If InputStream IsNot Nothing Then
InputStream.Dispose()
End If
End Try