Csharp/C Sharp/File Stream/File MemoryStream

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Demonstrate MemoryStream

/*
C#: The Complete Reference 
by Herbert Schildt 
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Demonstrate MemoryStream. 
 
using System; 
using System.IO; 
   
public class MemStrDemo {   
  public static void Main() {   
    byte[] storage = new byte[255]; 
 
    // Create a memory-based stream. 
    MemoryStream memstrm = new MemoryStream(storage); 
 
    // Wrap memstrm in a reader and a writer. 
    StreamWriter memwtr = new StreamWriter(memstrm); 
    StreamReader memrdr = new StreamReader(memstrm); 
 
    // Write to storage, through memwtr. 
    for(int i=0; i < 10; i++) 
       memwtr.WriteLine("byte [" + i + "]: " + i); 
 
    // put a period at the end 
    memwtr.Write("."); 
 
    memwtr.Flush(); 
 
    Console.WriteLine("Reading from storage directly: "); 
 
    // Display contents of storage directly. 
    foreach(char ch in storage) { 
      if (ch == ".") break; 
      Console.Write(ch); 
    } 
 
    Console.WriteLine("\nReading through memrdr: "); 
 
    // Read from memstrm using the stream reader. 
    memstrm.Seek(0, SeekOrigin.Begin); // reset file pointer  
 
    string str = memrdr.ReadLine(); 
    while(str != null) { 
      str = memrdr.ReadLine(); 
      if(str.rupareTo(".") == 0) break; 
      Console.WriteLine(str); 
    }  
  
  }  
}


Demonstrates reading a file into memory, attaching it to a MemoryStream and using stream methods to access the contents

/*
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
*/


illustrates use of MemoryStreams

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/

 /*
  Example15_13.cs illustrates use of MemoryStreams
*/
using System;
using System.Windows.Forms;
using System.IO;
public class Example15_13 
{
  // SaveMemoryStream saves the MemoryStream as a file
  public static void SaveMemoryStream(
    MemoryStream ms, string FileName)
  {
    FileStream outStream = File.OpenWrite(FileName);
    ms.WriteTo(outStream);
    outStream.Flush();
    outStream.Close();
  }
    [STAThread]
  public static void Main() 
  {
    // use an open file dialog to get a filename
    OpenFileDialog dlgOpen = new OpenFileDialog();
    dlgOpen.Title="Select file to back up";
    if (dlgOpen.ShowDialog() == DialogResult.OK)
    {
      // Read the file into a MemoryStream
      FileStream inStream = File.OpenRead(dlgOpen.FileName);
      MemoryStream storeStream = new MemoryStream();
      // copy all data from in to store
      storeStream.SetLength(inStream.Length);
      inStream.Read(storeStream.GetBuffer(), 0, (int)inStream.Length);
      // clean up
      storeStream.Flush();
      inStream.Close();
      // pass the store to a method to write it out
      SaveMemoryStream(storeStream, dlgOpen.FileName + ".bak");
      storeStream.Close();
    }
  }
}