C H A P T E R 20
File I/O and Object Serialization
When you create desktop applications, the ability to save information between user sessions is
imperative. This chapter examines a number of I/O-related topics as seen through the eyes of the .NET
Framework. The first order of business is to explore the core types defined in the System.IO namespace
and learn how to modify a machine’s directory and file structure programmatically. The next task is to
explore various ways to read from and write to character-based, binary-based, string-based, and
memory-based data stores.
After you learn how to manipulate files and directories using the core I/O types, you will examine
the related topic of object serialization. You can use object serialization to persist and retrieve the state of
an object to (or from) any System.IO.Stream-derived type. The ability to serialize objects is critical when
you want to copy an object to a remote machine using various remoting technologies such as Windows
Communication Foundation. However, serialization is quite useful in its own right and will likely play a
role in many of your .NET applications (distributed or not).
Exploring the System.IO Namespace
In the framework of .NET, the System.IO namespace is the region of the base class libraries devoted to
file-based (and memory-based) input and output (I/O) services. Like any namespace, System.IO defines
a set of classes, interfaces, enumerations, structures, and delegates, most of which you can find in
mscorlib.dll. In addition to the types contained within mscorlib.dll, the System.dll assembly defines
additional members of the System.IO namespace. Note that all Visual Studio projects automatically set a
reference to both assemblies.
Many of the types within the System.IO namespace focus on the programmatic manipulation of
physical directories and files. However, additional types provide support to read data from and write
data to string buffers, as well as raw memory locations. Table 20-1 outlines the core (nonabstract)
classes, providing a road map of the functionality in System.IO.
Table 20-1. Key Members of the System.IO Namespace
Nonabstract I/O Class Type
Meaning in Life
BinaryReader
BinaryWriter
These classes allow you to store and retrieve primitive data types
(integers, Booleans, strings, and whatnot) as a binary value.
BufferedStream
This class provides temporary storage for a stream of bytes that you can
commit to storage at a later time.
753