[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 47
  • Last Modified:

how to close and re-open a stream reader object

I am running into some issues where I throw an error when my file location is not available and in my catch statement I want to select a new file location that does exist.

Here is the code:

  Try
                    'Starts the process to Write the file in the defined export location.
                    Dim Stream As FileStream = New FileStream(exportFile.FullName, FileMode.Append)
                    Dim streamWriter As New StreamWriter(Stream)
                    streamWriter.Write(strExportHeader & strExportText)
                    streamWriter.Close()
                    Stream.Close()
                    'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
                Catch dirEx As DirectoryNotFoundException
                    mainFormStatusStripLabel.Font = New Font(mainFormStatusStripLabel.Font.FontFamily, 8, FontStyle.Regular)
                    mainFormStatusStripLabel.BackColor = System.Drawing.Color.Red
                    mainFormStatusStripLabel.Text = "The following export directory was not found..."
                    Dim Stream As FileStream = New FileStream(masterSettings.masterExport.masterExportOfflineLocation, FileMode.Append)
                    Dim streamWriter As New StreamWriter(Stream)
                    streamWriter.Write(strExportHeader & strExportText)
                    streamWriter.Close()
                    Stream.Close()
                Catch wio As IOException
                    Dim errStr As String
                    errStr = "The following export could not be written to. The file could be in use or corrupt..." & vbCrLf & vbCrLf
                    errStr += exportFile.FullName & vbCrLf & vbCrLf
                    errStr += "Press OK to select as temporary directory. NOTE: This must be changed in the Configuration or this dialog will continue to appear."
                    MessageBox.Show(errStr, "File In Use", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    Return -10
                End Try
0
cmdolcet
Asked:
cmdolcet
  • 3
  • 2
1 Solution
 
it_saigeDeveloperCommented:
The solution is to move your stream variable declarations outside the try...catch block and initialize them inside the try...catch block; e.g. -
Dim [stream] As FileStream = Nothing
Dim [writer] As StreamWriter = Nothing
Try
	'Starts the process to Write the file in the defined export location.
	[stream] = New FileStream(exportFile.FullName, FileMode.Append)
	[writer] = New StreamWriter([stream])
	[writer].Write(strExportHeader & strExportText)
	'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
Catch dirEx As DirectoryNotFoundException
	If [writer] IsNot Nothing Then [writer].Dispose()
	If [stream] IsNot Nothing Then [stream].Dispose()

	[writer] = Nothing
	[stream] = Nothing

	mainFormStatusStripLabel.Font = New Font(mainFormStatusStripLabel.Font.FontFamily, 8, FontStyle.Regular)
	mainFormStatusStripLabel.BackColor = System.Drawing.Color.Red
	mainFormStatusStripLabel.Text = "The following export directory was not found..."
	Try
		[stream] = New FileStream(masterSettings.masterExport.masterExportOfflineLocation, FileMode.Append)
		[writer] = New StreamWriter([stream])
		[writer].Write(strExportHeader & strExportText)
	Finally
		If [writer] IsNot Nothing Then [writer].Dispose()
		If [stream] IsNot Nothing Then [stream].Dispose()

		[writer] = Nothing
		[stream] = Nothing
	End Try
Catch wio As IOException
	Dim errStr As String
	errStr = "The following export could not be written to. The file could be in use or corrupt..." & vbCrLf & vbCrLf
	errStr += exportFile.FullName & vbCrLf & vbCrLf
	errStr += "Press OK to select as temporary directory. NOTE: This must be changed in the Configuration or this dialog will continue to appear."
	MessageBox.Show(errStr, "File In Use", MessageBoxButtons.OK, MessageBoxIcon.Warning)
	Return -10
Finally
	If [writer] IsNot Nothing Then [writer].Dispose()
	If [stream] IsNot Nothing Then [stream].Dispose()

	[writer] = Nothing
	[stream] = Nothing
End Try

Open in new window

OR

Use using statements, which basically encapsulates each variable declaration and initialization within it's own try...finally block; e.g. -
Try
	'Starts the process to Write the file in the defined export location.
	Using [stream] As New FileStream(exportFile.FullName, FileMode.Append)
		Using [writer] As New StreamWriter([stream])
			[writer].Write(strExportHeader & strExportText)
		End Using
	End Using
	'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
Catch dirEx As DirectoryNotFoundException
	mainFormStatusStripLabel.Font = New Font(mainFormStatusStripLabel.Font.FontFamily, 8, FontStyle.Regular)
	mainFormStatusStripLabel.BackColor = System.Drawing.Color.Red
	mainFormStatusStripLabel.Text = "The following export directory was not found..."
	Using [stream] As New FileStream(masterSettings.masterExport.masterExportOfflineLocation, FileMode.Append)
		Using [writer] As New StreamWriter([stream])
			[writer].Write(strExportHeader & strExportText)
		End Using
	End Using
Catch wio As IOException
	Dim errStr As String
	errStr = "The following export could not be written to. The file could be in use or corrupt..." & vbCrLf & vbCrLf
	errStr += exportFile.FullName & vbCrLf & vbCrLf
	errStr += "Press OK to select as temporary directory. NOTE: This must be changed in the Configuration or this dialog will continue to appear."
	MessageBox.Show(errStr, "File In Use", MessageBoxButtons.OK, MessageBoxIcon.Warning)
	Return -10
End Try

Open in new window


-saige-
0
 
cmdolcetAuthor Commented:
it_saige,

Taking your first example into my code. I get to the:

Try
            [stream] = New FileStream(masterSettings.masterExport.masterExportOfflineLocation, FileMode.Append)  

and ten it jumps to the Finally statement.

Any idea as to why?
0
 
cmdolcetAuthor Commented:
It says fileStream is a type and cannot be used as an expression?
0
 
it_saigeDeveloperCommented:
Both methods work for me:

Test code:
Imports System.IO

Module Module1
	Sub Main()
		Console.WriteLine("Running example 1: {0}", Example1())
		Console.WriteLine("Running example 2: {0}", Example2())
		Console.ReadLine()
	End Sub

	Function Example1() As Integer
		Dim [stream] As FileStream = Nothing
		Dim [writer] As StreamWriter = Nothing
		Try
			'Starts the process to Write the file in the defined export location.
			[stream] = New FileStream("C:\_admin\EE_Q28974184\testing1\testingex1.txt", FileMode.Append)
			[writer] = New StreamWriter([stream])
			[writer].Write("This is a test of example1")
			'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
		Catch dirEx As DirectoryNotFoundException
			If [writer] IsNot Nothing Then [writer].Dispose()
			If [stream] IsNot Nothing Then [stream].Dispose()

			[writer] = Nothing
			[stream] = Nothing

			Try
				[stream] = New FileStream("C:\_admin\EE_Q28974184\testingex1.txt", FileMode.Append)
				[writer] = New StreamWriter([stream])
				[writer].Write("This is a test of example1")
			Finally
				If [writer] IsNot Nothing Then [writer].Dispose()
				If [stream] IsNot Nothing Then [stream].Dispose()

				[writer] = Nothing
				[stream] = Nothing
			End Try
		Catch wio As IOException
			Console.WriteLine(wio.Message)
			Return -10
		Finally
			If [writer] IsNot Nothing Then [writer].Dispose()
			If [stream] IsNot Nothing Then [stream].Dispose()

			[writer] = Nothing
			[stream] = Nothing
		End Try
	End Function

	Function Example2() As Integer
		Try
			'Starts the process to Write the file in the defined export location.
			Using [stream] As New FileStream("C:\_admin\EE_Q28974184\testing2\testingex2.txt", FileMode.Append)
				Using [writer] As New StreamWriter([stream])
					[writer].Write("This is a test of example2")
				End Using
			End Using
			'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
		Catch dirEx As DirectoryNotFoundException
			Using [stream] As New FileStream("C:\_admin\EE_Q28974184\testingex2.txt", FileMode.Append)
				Using [writer] As New StreamWriter([stream])
					[writer].Write("This is a test of example2")
				End Using
			End Using
		Catch wio As IOException
			Console.WriteLine(wio.Message)
			Return -10
		End Try
	End Function
End Module

Open in new window

Test folders:Capture.JPGTest output:Capture.JPGSuccessful output:Capture.JPGExceptional output:Capture.JPG
-saige-
0
 
it_saigeDeveloperCommented:
It is possible, though, that you have a class or module that is named fileStream.  If this is the case try explicitly declaring the usage of filestream; e.g. -
Module Module1
	Sub Main()
		Console.WriteLine("Running example 1: {0}", Example1())
		Console.WriteLine("Running example 2: {0}", Example2())
		Console.ReadLine()
	End Sub

	Function Example1() As Integer
		Dim [stream] As System.IO.FileStream = Nothing
		Dim [writer] As System.IO.StreamWriter = Nothing
		Try
			'Starts the process to Write the file in the defined export location.
			[stream] = New System.IO.FileStream("C:\_admin\EE_Q28974184\testing1\testingex1.txt", System.IO.FileMode.Append)
			[writer] = New System.IO.StreamWriter([stream])
			[writer].Write("This is a test of example1")
			'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
		Catch ex As System.IO.DirectoryNotFoundException
			If [writer] IsNot Nothing Then [writer].Dispose()
			If [stream] IsNot Nothing Then [stream].Dispose()

			[writer] = Nothing
			[stream] = Nothing

			Try
				[stream] = New System.IO.FileStream("C:\_admin\EE_Q28974184\testingex1.txt", System.IO.FileMode.Append)
				[writer] = New System.IO.StreamWriter([stream])
				[writer].Write("This is a test of example1")
			Finally
				If [writer] IsNot Nothing Then [writer].Dispose()
				If [stream] IsNot Nothing Then [stream].Dispose()

				[writer] = Nothing
				[stream] = Nothing
			End Try
		Catch ex As System.IO.IOException
			Console.WriteLine(ex.Message)
			Return -10
		Finally
			If [writer] IsNot Nothing Then [writer].Dispose()
			If [stream] IsNot Nothing Then [stream].Dispose()

			[writer] = Nothing
			[stream] = Nothing
		End Try
	End Function

	Function Example2() As Integer
		Try
			'Starts the process to Write the file in the defined export location.
			Using [stream] As New System.IO.FileStream("C:\_admin\EE_Q28974184\testing2\testingex2.txt", System.IO.FileMode.Append)
				Using [writer] As New System.IO.StreamWriter([stream])
					[writer].Write("This is a test of example2")
				End Using
			End Using
			'This is triggered if export folder has change or has been deleted and canoot find the Partfile Export location.
		Catch ex As System.IO.DirectoryNotFoundException
			Using [stream] As New System.IO.FileStream("C:\_admin\EE_Q28974184\testingex2.txt", System.IO.FileMode.Append)
				Using [writer] As New System.IO.StreamWriter([stream])
					[writer].Write("This is a test of example2")
				End Using
			End Using
		Catch ex As System.IO.IOException
			Console.WriteLine(ex.Message)
			Return -10
		End Try
	End Function
End Module

Open in new window

0

Featured Post

2018 Annual Membership Survey

Here at Experts Exchange, we strive to give members the best experience. Help us improve the site by taking this survey today! (Bonus: Be entered to win a great tech prize for participating!)

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now