Solved

how to close and re-open a stream reader object

Posted on 2016-10-04
5
27 Views
Last Modified: 2016-10-06
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
Comment
Question by:cmdolcet
  • 3
  • 2
5 Comments
 
LVL 33

Accepted Solution

by:
it_saige earned 500 total points
ID: 41828380
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
 

Author Comment

by:cmdolcet
ID: 41830552
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
 

Author Comment

by:cmdolcet
ID: 41830558
It says fileStream is a type and cannot be used as an expression?
0
 
LVL 33

Expert Comment

by:it_saige
ID: 41830631
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
 
LVL 33

Expert Comment

by:it_saige
ID: 41830640
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now