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

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

Версия 18:31, 26 мая 2010

Copy a file

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

/* Copy a file.

  To use this program, specify the name  
  of the source file and the destination file. 
  For example, to copy a file called FIRST.DAT 
  to a file called SECOND.DAT, use the following 
  command line. 

  CopyFile FIRST.DAT SECOND.DAT 
  • /

using System; using System.IO;

public class CopyFile {

 public static void Main(string[] args) { 
   int i; 
   FileStream fin; 
   FileStream fout; 

   try { 
     // open input file 
     try { 
       fin = new FileStream(args[0], FileMode.Open); 
     } catch(FileNotFoundException exc) { 
       Console.WriteLine(exc.Message + "\nInput File Not Found"); 
       return; 
     } 

     // open output file 
     try { 
       fout = new FileStream(args[1], FileMode.Create); 
     } catch(IOException exc) { 
       Console.WriteLine(exc.Message + "\nError Opening Output File"); 
       return; 
     } 
   } catch(IndexOutOfRangeException exc) { 
     Console.WriteLine(exc.Message + "\nUsage: CopyFile From To"); 
     return; 
   } 

   // Copy File 
   try { 
     do { 
       i = fin.ReadByte(); 
       if(i != -1) fout.WriteByte((byte)i); 
     } while(i != -1); 
   } catch(IOException exc) { 
     Console.WriteLine(exc.Message + "File Error"); 
   } 

   fin.Close(); 
   fout.Close(); 
 } 

}


      </source>


Demonstrate random access

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Demonstrate random access.

using System; using System.IO;

public class RandomAccessDemo {

 public static void Main() { 
   FileStream f; 
   char ch;

   try { 
     f = new FileStream("random.dat", FileMode.Create); 
   } 
   catch(IOException exc) { 
     Console.WriteLine(exc.Message); 
     return ; 
   } 

   // Write the alphabet.      
   for(int i=0; i < 26; i++) { 
     try { 
       f.WriteByte((byte)("A"+i)); 
     }  
     catch(IOException exc) { 
       Console.WriteLine(exc.Message); 
       return ; 
     } 
   } 

   try { 
     // Now, read back specific values 
     f.Seek(0, SeekOrigin.Begin); // seek to first byte 
     ch = (char) f.ReadByte(); 
     Console.WriteLine("First value is " + ch); 

     f.Seek(1, SeekOrigin.Begin); // seek to second byte 
     ch = (char) f.ReadByte(); 
     Console.WriteLine("Second value is " + ch); 

     f.Seek(4, SeekOrigin.Begin); // seek to 5th byte 
     ch = (char) f.ReadByte(); 
     Console.WriteLine("Fifth value is " + ch); 

     Console.WriteLine(); 

     // Now, read every other value. 
     Console.WriteLine("Here is every other value: "); 
     for(int i=0; i < 26; i += 2) { 
       f.Seek(i, SeekOrigin.Begin); // seek to ith double 
       ch = (char) f.ReadByte(); 
       Console.Write(ch + " "); 
     } 
   }  
   catch(IOException exc) { 
     Console.WriteLine(exc.Message); 
   } 
 
   Console.WriteLine(); 
   f.Close(); 
 } 

}


      </source>


Demonstrates opening/creating a file for writing and truncating its length to 0 bytes.

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// StrmWrit.cs -- Demonstrates opening/creating a file for writing and truncating // its length to 0 bytes. // Compile this program with the following command line: // C:>csc StrmWrit.cs using System; using System.IO; namespace nsStreams {

   public class StrmWrit
   {
       static public void Main ()
       {
           FileStream strm;

// Open or create the file for writing

           try
           {
               strm = new FileStream ("./write.txt", FileMode.OpenOrCreate, FileAccess.Write);
           }

// If the open fails, the constructor will throw an exception.

           catch (Exception e)
           {
               Console.WriteLine (e.Message);
               Console.WriteLine ("Cannot open write.txt for writing");
               return;
           }

// Truncate the file using the SetLength() method.

           strm.SetLength (0);
           Console.WriteLine ("Enter text. Type a blank line to exit\r\n");

// Accept text from the keyboard and write it to the file.

           while (true)
           {
               string str = Console.ReadLine ();
               if (str.Length == 0)
                   break;
               byte [] b; // = new byte [str.Length];
               StringToByte (str, out b);
               strm.Write (b, 0, b.Length);
           }
           Console.WriteLine ("Text written to write.txt");

// Close the stream

           strm.Close ();
       }

// // Convert a string to a byte array, adding a carriage return/line feed to it

       static protected void StringToByte (string str, out byte [] b)
       {
           b = new byte [str.Length + 2];
           int x;
           for (x = 0; x < str.Length; ++x)
           {
               b[x] = (byte) str[x];
           }

// Add a carriage return/line feed

           b[x] = 13;
           b[x + 1] = 10;
       }
   }

}


      </source>


Demonstrates seeking to a position in a file from the end

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// Seek.cs -- Demonstrates seeking to a position in a file from the end, // middle and beginning of a file // // Compile this program with the following command line: // C:>csc Seek.cs using System; using System.IO; using System.Text; namespace nsStreams {

   public class Seek
   {
       const string str1 = "Now is the time for all good men to " +
                           "come to the aid of their Teletype.\r\n";
       const string str2 = "The quick red fox jumps over the " +
                          "lazy brown dog.\r\n";
       static public void Main ()
       {
           FileStream strm;
           try
           {
               strm = new FileStream ("./StrmSeek.txt",
                                      FileMode.Create,
                                      FileAccess.ReadWrite);
           }
           catch (Exception e)
           {
               Console.WriteLine (e);
               Console.WriteLine ("Cannot open StrmSeek.txt " +
                                  "for reading and writing");
               return;
           }

// Clear out any remnants in the file // strm.SetLength (0);

           foreach (char ch in str1)
           {
               strm.WriteByte ((byte) ch);
           }
           foreach (char ch in str2)
           {
               strm.WriteByte ((byte) ch);
           }

// Seek from the beginning of the file

           strm.Seek (str1.Length, SeekOrigin.Begin);

// Read 17 bytes and write to the console.

           byte [] text = new byte [17];
           strm.Read (text, 0, text.Length);
           ShowText (text);

// Seek back 17 bytes and reread.

           strm.Seek (-17, SeekOrigin.Current);
           strm.Read (text, 0, text.Length);
           ShowText (text);

// Seek from the end of the file to the beginning of the second line.

           strm.Seek (-str2.Length, SeekOrigin.End);
           strm.Read (text, 0, text.Length);
           ShowText (text);
       }
       static void ShowText (byte [] text)
       {
           StringBuilder str = new StringBuilder (text.Length);
           foreach (byte b in text)
           {
   
               str.Append ((char) b);
           }
           Console.WriteLine (str);
       }
   }

} //File: StrmSeek.txt /* Now is the time for all good men to come to the aid of their Teletype. The quick red fox jumps over the lazy brown dog.

  • /
      </source>


Display a text file

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

/* Display a text file.

  To use this program, specify the name  
  of the file that you want to see. 
  For example, to see a file called TEST.CS, 
  use the following command line. 

  ShowFile TEST.CS 
  • /

using System; using System.IO;

public class ShowFile {

 public static void Main(string[] args) { 
   int i; 
   FileStream fin; 

   try { 
     fin = new FileStream(args[0], FileMode.Open); 
   } catch(FileNotFoundException exc) { 
     Console.WriteLine(exc.Message); 
     return; 
   } catch(IndexOutOfRangeException exc) { 
     Console.WriteLine(exc.Message + "\nUsage: ShowFile File"); 
     return; 
   } 

   // read bytes until EOF is encountered 
   do { 
     try { 
       i = fin.ReadByte(); 
     } catch(Exception exc) { 
       Console.WriteLine(exc.Message); 
       return; 
     } 
     if(i != -1) Console.Write((char) i); 
   } while(i != -1); 

   fin.Close(); 
 } 

}


      </source>


Hex value Dump

<source lang="csharp"> using System; using System.IO; class HexDump {

   public static void Main(string[] astrArgs) {
       Stream stream = new FileStream("c:\\a.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
       
       byte[] abyBuffer = new byte[16];
       long lAddress = 0;
       int count;
       while ((count = stream.Read(abyBuffer, 0, 16)) > 0) {
           ComposeLine(lAddress, abyBuffer, count);
           lAddress += 16;
       }
   }
   public static void ComposeLine(long lAddress, byte[] abyBuffer, int count) {
       Console.WriteLine(String.Format("{0:X4}-{1:X4}  ", (uint)lAddress / 65536, (ushort)lAddress));
       for (int i = 0; i < 16; i++) {
           Console.WriteLine((i < count) ? String.Format("{0:X2}", abyBuffer[i]) : "  ");
           Console.WriteLine((i == 7 && count > 7) ? "-" : " ");
       }
       Console.WriteLine(" ");
       for (int i = 0; i < 16; i++) {
           char ch = (i < count) ? Convert.ToChar(abyBuffer[i]) : " ";
           Console.WriteLine(Char.IsControl(ch) ? "." : ch.ToString());
       }
   }

}

</source>


Writes the same string to a file and to the screen using a common method

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// WriteOut.cs -- Writes the same string to a file and to the screen using // a common method. // // Compile this program with the following command line: // C:>csc WriteOut.cs namespace nsStreams {

   using System;
   // When using streams, you must declare that you are using System.IO
   using System.IO;
   
   public class WriteOut
   {
       static public void Main ()
       {
           string str = "This is a line of text\r\n";
           
           // Open the standard output stream
           Stream ostrm = Console.OpenStandardOutput ();
           
           // Open a file. You should protect an open in a try ... catch block
           FileStream fstrm;
           try
           {
               fstrm = new FileStream ("./OutFile.txt", FileMode.OpenOrCreate);
           }
           catch
           {
               Console.WriteLine ("Failed to open file");
               return;
           }
           
           // Call WriteToStream() to write the same string to both
           WriteToStream (ostrm, str);
           WriteToStream (fstrm, str);
           
           // Close the file.
           fstrm.Close ();
           ostrm.Close ();
       }
       static public void WriteToStream (Stream strm, string text)
       {
           foreach (char ch in text)
           {
               strm.WriteByte ((Byte) ch);
           }
           // Flush the output to make it write
           strm.Flush ();
       }
   }

}


      </source>


Write to a file

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Write to a file.

using System; using System.IO;

public class WriteToFile {

 public static void Main(string[] args) { 
   FileStream fout; 

   // open output file 
   try { 
     fout = new FileStream("test.txt", FileMode.Create); 
   } catch(IOException exc) { 
     Console.WriteLine(exc.Message + "\nError Opening Output File"); 
     return; 
   } 

   // Write the alphabet to the file. 
   try { 
     for(char c = "A"; c <= "Z"; c++) 
       fout.WriteByte((byte) c); 
   } catch(IOException exc) { 
     Console.WriteLine(exc.Message + "File Error"); 
   } 

   fout.Close(); 
 } 

}


      </source>