File Stream C#

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
// MemStrm.cs -- Demonstrates reading a file into memory, attaching it to a
//               MemoryStream and using stream methods to access the contents
//
//               Compile this program with the following command line:
//                   C:>csc MemStrm.cs
using System;
using System.IO;
namespace nsStreams
{
    public class MemStrm
    {
        const string USA = "[USA]";
        const string PhoneEntry = "Phone_number=";
        static public void Main ()
        {
            FileStream cfg;
            try
            {
                cfg = new FileStream ("./config.ini",
                                      FileMode.Open,
                                      FileAccess.ReadWrite);
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine ("Cannot find ./config.ini");
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine (e.Message);
                Console.WriteLine ("Cannot find ./config.ini");
                return;
            }
            MemoryStream mem = new MemoryStream ((int) cfg.Length);
            cfg.Read (mem.GetBuffer(), 0, (int) cfg.Length);
            int pos = FindInBuffer (USA, 0, mem.GetBuffer());
            if (pos < 0)
            {
                Console.WriteLine ("Could not find match in buffer");
            }
            else
            {
                pos = FindInBuffer (PhoneEntry, pos, mem.GetBuffer());
                if (pos < 0)
                {
                    Console.WriteLine ("Could not find phone number");
                }
                else
                {
                    const string NewPhone = "1888555-9876";
                    mem.Seek (pos + PhoneEntry.Length, SeekOrigin.Begin);
                    for (int x = 0; x < NewPhone.Length; ++x)
                    {
                          mem.WriteByte ((byte) NewPhone[x]);
                    }
                    cfg.SetLength (0);
                    cfg.Write (mem.GetBuffer(), 0,
                              (int) mem.GetBuffer().Length);
                }
            }
            cfg.Flush ();
            cfg.Close ();
            mem.Close ();
        }
//
// Find a string of characters in a buffer of type byte
        static int FindInBuffer (string ToFind, int start, byte [] buf)
        {
            for (int x = start; x < buf.Length; ++x)
            {
                if (buf[x] == (byte) ToFind[0])
                {
                    int y;
                    for (y = 1; y < ToFind.Length; ++y)
                    {
                        if ((x + y) >= buf.Length)
                            break;
                        if (buf[x + y] != (byte) ToFind[y])
                            break;
                    }
                    if (y == ToFind.Length)
                    {
                        return (x);
                    }
                }
            }
            return (-1);
        }
//
// Convert a buffer of type string to byte
        static void StringToByte (out byte [] b, string str)
        {
            b = new byte [str.Length];
            for (int x = 0; x < str.Length; ++x)
            {
                b[x] = (byte) str [x];
            }
        }
//
// Convert a buffer of type byte to a string
        static string ByteToString (byte [] b, int start)
        {
            string str = "";
            for (int x = start; x < b.Length; ++x)
            {
                str += (char) b [x];
            }
            return (str);
        }
    }
}
//File: config.ini
/*
[PROGRAM]
Program Directory=C:\TEMP\
Data Directory=
[DEFAULTS]
Phone_number=800-555-2345
Wallpaper=wallppr.bmp
sshow=default
[Modem]
Initialization String=ATX4L1
Dial Type=1
[Countries]
1=USA
2=Canada
3=United Kingdom
[USA]
Phone_number=1800555-1234
TOLLFREE=1
[Canada]
Phone_number=1800555-2345
TOLLFREE=1
[United Kingdom]
Phone_number=08009872345
TOLLFREE=1
*/