C#:读写简单的文本文件

时间:2022-08-28 10:02:42

  C#:读写简单的文本文件

常常我们会去读写一些简单的文本文件,如:读写log文件等等。DotNet中对文件的处理比较简单,但要注意的是:防止产生乱码。 这里,我将运用两种方式来对文本文件进行读写。 一、一次性读写文件的全部内容 我们将要用到以下两个类:FileInfo和FileStream,它们都位于System.IO命名空间中。 · FileInfo:通过此类可获得指定文件的详细内容,并且,还提供创建、复制、删除、移动和打开文件的实例方法,除此,FileInfo还能通过其实例方法OpenRead()来创建FileStream对象。详情可参考MSDN中的System.IO.FileInfo · FileStream:支持同步和异步读写操作。使用FileStream类对文件进行读取、写入、打开和关闭等操作,并能对其他与文件相关的操作句柄进行操作。详情可参考System.IO.FileStream 下面用一个简单的Demo来演示: 1.导入必要的namespace; C#:读写简单的文本文件using System;
C#:读写简单的文本文件
using System.Collections.Generic;
C#:读写简单的文本文件
using System.Linq;
C#:读写简单的文本文件
using System.Text;
C#:读写简单的文本文件
using System.IO;    // Import the namespace for using the FileInfo class and FileStream class
  2.创建一个读取文本文件的方法:ReadFile(string filename),并以byte[]型返回文本文件的所有内容; C#:读写简单的文本文件static byte[] ReadFile(string filename)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件       FileInfo fi 
= new FileInfo(filename);
C#:读写简单的文本文件       
C#:读写简单的文本文件      
// Using the OpenRead() method to create a FileStream instance     
C#:读写简单的文本文件
       FileStream fs = fi.OpenRead();
C#:读写简单的文本文件
C#:读写简单的文本文件       
byte[] bytes = new byte[fs.Length];
C#:读写简单的文本文件
C#:读写简单的文本文件       
// Read content of the specified file, and store it with byte[] type
C#:读写简单的文本文件
       fs.Read(bytes, 0, (int)fs.Length);
C#:读写简单的文本文件
C#:读写简单的文本文件       
return bytes;        
C#:读写简单的文本文件}
  1.创建一个将文本内容写入指定文件的方法:WriteToFile(byte[] bytes, string filename); C#:读写简单的文本文件static WriteToFile(byte[] bytes, string filename)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件      FileStream fs; 
C#:读写简单的文本文件      
try
C#:读写简单的文本文件C#:读写简单的文本文件      
{
C#:读写简单的文本文件           
// Create a instance of FileStream with the specified filename
C#:读写简单的文本文件
           fs = File.Create(filename);
C#:读写简单的文本文件           
// Write all the byte[] into the FileStream's instance
C#:读写简单的文本文件
           fs.Write(bytes, 0, bytes.Length);
C#:读写简单的文本文件                
C#:读写简单的文本文件           
// Write content into the file    
C#:读写简单的文本文件
           fs.Flush();  
C#:读写简单的文本文件      
C#:读写简单的文本文件           fs.Close();
C#:读写简单的文本文件       }

C#:读写简单的文本文件       
catch (Exception e)
C#:读写简单的文本文件C#:读写简单的文本文件       
{
C#:读写简单的文本文件            Console.WriteLine(e.ToString());
C#:读写简单的文本文件        }

C#:读写简单的文本文件}
  4.现在我们只需在Main()方法中先后调用ReadFile和WriteToFile方法便可完成简单的文本文件夹读写操作:   C#:读写简单的文本文件static void Main(string[] args)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件      
string inputFile = @"d: estinput.txt";
C#:读写简单的文本文件      
string outputFile = @"d: estoutput.txt";
C#:读写简单的文本文件      WriteStrToFile(ReadFile(inputFile), outputFile);
C#:读写简单的文本文件}
  需要注意:这种方式读取文件其实是将文本文件中的内容以byte流的方式返回,再将这个byte流写入到另一文件中,这样有其好处:整读整写,也不需要考虑文件编码,只要原输入文件在操作系统中能正常显示,那其输出文件的显示也不会有问题。 但是,有的时候,我们并不想去整读一文档,而可能只要读取其中的某几行,那以上的方式就对我们不大可行了。在此,我们给出第二种读写文件方式。 二、一次读写一行 我们将采用StreamReader类来读取文本文件,还会用到与文件编码相关的类Encoding,在写文件时,仍然用FileStream。 · StreamReader: 继承自System.IO.TextReader,能够以一种特定的编码从字节流中读取字符。其默认编码为UTF-8,而并不是当前系统的ANSI。详情请参见System.IO.StreamReader · Encoding: 描述编码。它用于对Unicode字符进行操作,而不是对任意二进制数据(如:字节数组)进行操作。请参考System.Text.Encoding 也用一Demo来简单说明其用法: 1. 读取指定文件中的一行内容,并以string类型返回;  C#:读写简单的文本文件static string ReadFile(string filename)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件    
string content = "";
C#:读写简单的文本文件
C#:读写简单的文本文件    
// Create a StreamReader by a specified Encoding type: Windows OS default type: ANSI
C#:读写简单的文本文件
    StreamReader fileReader = new StreamReader(filename, Encoding.Default);
C#:读写简单的文本文件
C#:读写简单的文本文件    
string tempStr;
C#:读写简单的文本文件    
while (true)
C#:读写简单的文本文件C#:读写简单的文本文件    
{
C#:读写简单的文本文件        tempStr 
= fileReader.ReadLine();
C#:读写简单的文本文件        
if (tempStr==null)
C#:读写简单的文本文件C#:读写简单的文本文件        
{
C#:读写简单的文本文件            
break;
C#:读写简单的文本文件        }

C#:读写简单的文本文件        content 
+= tempStr + " ";
C#:读写简单的文本文件    }

C#:读写简单的文本文件
C#:读写简单的文本文件    
return content;
C#:读写简单的文本文件}
  2.将一string类型的数据写入指定的文件; C#:读写简单的文本文件static void WriteToFile(string content, string filename)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件    Encoding winDefault 
= Encoding.Default;
C#:读写简单的文本文件    FileStream fs;
C#:读写简单的文本文件
C#:读写简单的文本文件    
try
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件    
// Create a instance of FileStream with the specified filename
C#:读写简单的文本文件
        fs = File.Create(filename);
C#:读写简单的文本文件        
C#:读写简单的文本文件        
// Change the string data to byte[] data in the win default encoding: ANSI
C#:读写简单的文本文件
        Byte[] bytes = winDefault.GetBytes(content);
C#:读写简单的文本文件
C#:读写简单的文本文件        fs.Write(bytes, 
0, bytes.Length);
C#:读写简单的文本文件        fs.Flush();
C#:读写简单的文本文件        fs.Close(); 
C#:读写简单的文本文件    }

C#:读写简单的文本文件    
catch(Exception e)
C#:读写简单的文本文件C#:读写简单的文本文件    
{
C#:读写简单的文本文件        Console.WriteLine(e.ToString());
C#:读写简单的文本文件    }

C#:读写简单的文本文件}
  3.在Main()方法中调用这两个方法完成文件部分内容的读写; C#:读写简单的文本文件static void Main(string[] args)
C#:读写简单的文本文件C#:读写简单的文本文件
{
C#:读写简单的文本文件      
string inputFile = @"d: estinput.txt";
C#:读写简单的文本文件      
string outputFile = @"d: estoutput.txt"
C#:读写简单的文本文件      WriteStrToFile(ReadFile(inputFile), outputFile);
C#:读写简单的文本文件}
  注意:在DotNet中,string数据永远都是Unicode编码形式,而正常情况下,Windows系统中的字符显示编码为ANSI,要正确地从以ANSI编码的文件中读取数据并存放编码为Unicode的string类型,然后再将这Unicode编码数据写入文件并能在系统中正确显示,就应该统一读取和写入时的编码格式,以防显示乱码。因此,我们在读取文件时(ReadFile()方法中),使用指定的Encoding.Default(即:ANSI)编码方式读取,再在写入文件时(WriteToFile()方法中),使用Encoding.Default编码将string类型数据转换成byte流,这样,我们就成功完成了编码的统一,防止了乱码的出现。 以上两种方法简单地描述了一下在DotNet中文本文件的读写,其关键在于字符的编码。 我们再回过头看方法一,这种方式不需要考虑编码的原因在于:它在读取文件时是以一种默认的编码方式返回byte流,而在将此byte流写入文件时也是以同样的一种编码,在这过程中并没有编码的转换,因此,只要原数据文件显示正常,则其写入后的文件也必然会显示正常。 而方法二有所不同,在读写过程中,出现几次编码的转换:ANSI(原数据文件编码)àUnicode(数据缓存中的编码)àANSI(写入后的数据编码),为了转换成功,我们就必须统一读写过程中的编码形式。