Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

how to close and re-open a stream reader object

Posted on 2016-10-04
5
31 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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
VB: Convert 2 dates to specific format 24 52
Help with converting xml file to excel using VB.NET 3 25
How to open form using item in Listbox. 8 23
Access Schema 6 25
Article by: Kraeven
Introduction Remote Share is a simple remote sharing tool, enabling you to see, add and remove remote or local shares. The application is written in VB.NET targeting the .NET framework 2.0. The source code and the compiled programs have been in…
Introduction As chip makers focus on adding processor cores over increasing clock speed, developers need to utilize the features of modern CPUs.  One of the ways we can do this is by implementing parallel algorithms in our software.   One recent…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

856 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