Solved

C# StreamReader

Posted on 2013-01-18
11
587 Views
Last Modified: 2013-01-22
Hi Guys,

I'm using a StreamReader object to read the contents of a text file one line at time. Somthing along the lines of the following:

System.IO.StreamReader file = new System.IO.StreamReader("c:\test.txt");

try
{
while((line = file.ReadLine()) != null)
{
//Do Stuff
}
}catch(exception ex)
//Error Handler
{
finally
{
file.close();
}

The problem I have is that when I open the file manually (with the app still open) I can't make changes. Doesn't the close() method release the resource?
0
Comment
Question by:naelyan
  • 4
  • 2
  • 2
  • +2
11 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
Comment Utility
you may try this syntax:
using ( System.IO.StreamReader file = new System.IO.StreamReader("c:\test.txt"))
{
try
{
while((line = file.ReadLine()) != null)
{
//Do Stuff
}
}catch(exception ex)
//Error Handler
{
finally
{
file.close();
}
} 

Open in new window

0
 

Author Comment

by:naelyan
Comment Utility
That's exactly what I did and it doesn't seem to work.
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
actually, the "using" syntax will add a implicit "file.dispose()", and should work.
so, my code suggestion is NOT the same as your code.
0
 
LVL 15

Expert Comment

by:navneethegde
Comment Utility
Hi!

Close vs Dispose
http://forums.asp.net/t/1744269.aspx/1

Thanks!
0
 
LVL 15

Expert Comment

by:navneethegde
Comment Utility
So with  angelIII suggestions
you are adding extra dispose in your finally block

finally
{
file.close();
file.dispose();
}

Open in new window



Thanks!
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 

Author Comment

by:naelyan
Comment Utility
Sorry  angelIII my bad I did see the using statement in your posted code.
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
Actually, for streams (and StreamReaders), the Close method calls Dispose, so functionally there is no difference in either approach.

Doesn't the close() method release the resource?
It does, but you have to understand that resources aren't necessarily released at the instant you call Dispose. It is up to the GC as to when it releases resources. You can force a GC run by calling GC.Collect();, but this is generally bad for performance.
0
 
LVL 15

Expert Comment

by:navneethegde
Comment Utility
@Kaufmed : Isn't for umnanaged resources, dispose clears all resources and doesnt depend upon GC.
0
 
LVL 15

Expert Comment

by:navneethegde
Comment Utility
@kaufmed : I mean to say releasing of resources are in dispose pattern imlpementation by assembly author in case unmanaged code, generally in case of File operation.
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
Unfortunately, I'm not deeply versed in the CLR and the GC. My understanding is that it should be, but I have had really tight loops that dealt with files which still generated locking errors. It could have been my naiveté with how I wrote the code, though. To the best of my knowledge (and my practical experience), what is written above (or the alternative using approach) should work.
0
 
LVL 13

Expert Comment

by:Naman Goel
Comment Utility
You have to specify FileShare Mode for achieving this:

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            using (StreamReader sr = new StreamReader(new FileStream(@"c:\new1.txt", FileMode.Open,  FileAccess.Read,  FileShare.ReadWrite)))
            {
                string line = String.Empty;
                while ((line= sr.ReadLine())!=null)
                {
                    sb.Append(line);
                }
            }
        }
    }
}

Open in new window

0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Suggested Solutions

Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

763 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

7 Experts available now in Live!

Get 1:1 Help Now