Wednesday, October 19, 2011
Reading Text Files in an ASP.NET Web Page
Introduction
There are many real-world situations in which you may wish to read part of or an entire text file into a string variable in a Web page. To read a text file in classic ASP you would simply use the FileSystemObject. In fact, there is an entire FAQ category on the FileSystemObject at ASPFAQs.com.
While you can use the FileSystemObject in an ASP.NET Web page it will impose some serious performance constraints. Rather you should use the classes provided by the .NET Framework to read files. This article examines how to read text files. In a future article I will examine how to use the .NET Framework to read XML files.
File
or FileInfo
?
There are a number of ways to open a text file in the .NET Framework. All of these methods, though, reside in one of two classes, both of which can be found in the
System.IO
namespace. These two classes are File
and FileInfo
. The difference between the two is slight. The File
class is composed exclusively of shared (static) methods, while the FileInfo
class is not. Shared methods are methods that can be invoked without requiring an instance of the class to invoke. For example, using these classes to, say, delete a file, would go like so:
|
Note that the
File
class's Delete
method takes a single parameter, the file to delete, and is invoked without creating an instance of the File
class. Alternatively, the FileInfo
class's Delete
method takes zero parameters, the file to be deleted is the one that was specified in the FileInfo
's constructor.Personally I prefer the
File
class and will be using it for these examples. Which one you choose is a personal choice. I would wager there is a very, very slight performance advantage in using theFile
class since you don't have to undergo the overhead involved in object creation, but that assumption is really just speculation. (If you're interested, I invite you to run some benchmark tests on the two classes, and let me know what you find!)Opening the File
The simplest way to open a text file for reading is to use the
OpenText
method. This method opens a text file encoded in UTF-8 (ASCII). You can use the more generic Open
method to explicitly specify the file mode (create/open/append/truncate), the file access (read/write/read-write), and the file sharing rights; however, if you're just wanting to read a text file, the OpenText
method should be sufficient.The OpenText
method returns a StreamReader
object that allows you to read the contents of the file you've just opened. Hence, to open a file, our ASP.NET code might look like:
|
Note that on the first line we import the
System.IO
namespace, since that's the namespace the File
class resides in. Next, in our Page_Load
event handler we create a string named FILENAME
that contains the complete physical path to the file we wish to open (such as C:\Inetpub\wwwroot\Rand.txt
). Note that the Server.MapPath
in ASP.NET is identical to that in classic ASP (to learn more aboutServer.MapPath
be sure to read: Using Server.MapPath
).Reading the Contents of the File
Most commonly you'll either want to read the next line of the text file or you'll want to read the entire contents of the text file into a string. In the latter case, simply use the
ReadToEnd()
method like so:
|
If you want to read one line at a time, you need to first make sure that there is more contents of the file to be read. You can use the
Peek()
method to accomplish this. Peek()
returns the next character in the stream (without removing it), and returns a -1 when there are no more characters; thus you can simply loop while objStreamReader.Peek() <> -1
, and, in each iteration of the loop, use the ReadLine()
method to read the next line from the file, like so:
|
VERY IMPORTANT! Closing the StreamReader
When you're done reading the file it is very important that you close the
StreamReader
using the Close()
method. If you forget to do this the ASP.NET Web pages can continue to access this file just fine, but if you attempt to access the file via another user, or if you attempt to delete the file or overwrite the file you will get access denied errors, because the ASP.NET process is still holding a read lock on the file. So just be certain to close the file when you're done.Conclusion
A complete example can be seen at the end of this article. It simple opens up a hard-coded text file, reads the file's entire contents into a string, and then dumps the string into a server-side label Web control. You can also try out a live demo of the complete example.As you can see, reading text files through an ASP.NET Web page is not at all difficult. While the syntax differs a bit from that of the FileSystemObject syntax you may be familiar with, it is nevertheless very straightfoward and easy to learn. For more information on reading and writing files in ASP.NET be sure to check out this sample chapter from ASP.NET: Tips, Tutorials, and Code.!
Happy Programming!
A Complete Example
|