Csharp/C Sharp/File Stream/File MemoryStream — различия между версиями

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

Текущая версия на 14:45, 26 мая 2010

Demonstrate MemoryStream

<source lang="csharp"> /* 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); 
   }  
 
 }  

}


      </source>


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

<source lang="csharp"> /* 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

  • /


      </source>


illustrates use of MemoryStreams

<source lang="csharp"> /* 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();
   }
 }

}

      </source>