Wednesday, May 25, 2011

Save a file into MemoryStream and access the contents of MemoryStream

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 ((intcfg.Length);
            cfg.Read (mem.GetBuffer()0(intcfg.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 ((byteNewPhone[x]);
                    }
                    cfg.SetLength (0);
                    cfg.Write (mem.GetBuffer()0,
                              (intmem.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== (byteToFind[0])
                {
                    int y;
                    for (y = 1; y < ToFind.Length; ++y)
                    {
                        if ((x + y>= buf.Length)
                            break;
                        if (buf[x + y!= (byteToFind[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(bytestr [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[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

*/


No comments :

Post a Comment