痞子龍㊣

C#零起点

 

文件內容的讀寫

讀取文件


   string FILE_NAME=MapPath( "readerme.txt").ToString();

   try
   {
    if (!File.Exists(FILE_NAME))
    {
     this.TextReaderme.Text = "注册协议不存在。请联系网站管理员。";
    }

      //生成一个big endian Unicode编码格式的文本文件

    //      StreamWriter sw = new StreamWriter(fileName, false, Encoding.BigEndianUnicode);//你可以试试其他编码,比如Encoding.GetEncoding("GB2312")或UTF8
    //
    //      sw.Write("这是一个String");
    //
    //      sw.Close();

      //读取

      Encoding fileEncoding = TxtFileEncoding.GetEncoding(FILE_NAME, Encoding.GetEncoding("GB2312"));//取得这txt文件的编码

    //      Console.WriteLine("这个文本文件的编码为:" + fileEncoding.EncodingName);

      StreamReader sr = new StreamReader(FILE_NAME, fileEncoding);//用该编码创建StreamReader

      //用下面的方法虽然可以让系统自动判断文本文件的编码格式,但是我们无法取得该文本文件的编码

      //sr.CurrentEncoding永远为 Unicode(UTF-8)
      //StreamReader sr = new StreamReader(fileName, true);
      //Console.WriteLine("这个文本文件的编码为:" + sr.CurrentEncoding.EncodingName);
    //Console.WriteLine("这个文本文件的内容为:" + sr.ReadToEnd());
    this.TextReaderme.Text=sr.ReadToEnd();
      sr.Close(); 
   }
   catch (Exception e)
   {
    // throw;
    this.TextReaderme.Text = "读取注册协议失败!:"+e.Message;
   
   
   }

#region 写文件
        /****************************************
         * 函数名称:WriteFile
         * 功能说明:当文件不存时,则创建文件,并追加文件
         * 参    数:Path:文件路径,Strings:文本内容
         * 调用示列:
         *           string Path = Server.MapPath("Default2.aspx");      
         *           string Strings = "这是我写的内容啊";
         *           EC.FileObj.WriteFile(Path,Strings);
        *****************************************/
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="Path">文件路径</param>
        /// <param name="Strings">文件内容</param>
        public static void WriteFile(string Path, string Strings)
        {
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true, System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Strings);
            f2.Close();
            f2.Dispose();
        }
        #endregion


_______________________________________________________________________________
using System;
using System.Text ;
using System.IO ;

namespace JackLibrary.Common
{
 /// <summary>
 ///   取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。
    /// </summary>
 public class TxtFileEncoding
 {
  public TxtFileEncoding()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  /// <summary>

    /// 取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。

    /// </summary>

    /// <param name="fileName">文件名。</param>

    /// <returns></returns>

    public static Encoding GetEncoding(string fileName)

    {

      return GetEncoding(fileName, Encoding.Default);

    }

    /// <summary>

    /// 取得一个文本文件流的编码方式。

    /// </summary>

    /// <param name="stream">文本文件流。</param>

    /// <returns></returns>

    public static Encoding GetEncoding(FileStream stream)

    {

      return GetEncoding(stream, Encoding.Default);

    }

    /// <summary>

    /// 取得一个文本文件的编码方式。

    /// </summary>

    /// <param name="fileName">文件名。</param>

    /// <param name="defaultEncoding">默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。</param>

    /// <returns></returns>

    public static Encoding GetEncoding(string fileName, Encoding defaultEncoding)

    {

      FileStream fs = new FileStream(fileName, FileMode.Open);

      Encoding targetEncoding = GetEncoding(fs, defaultEncoding);

      fs.Close();

      return targetEncoding;

    }

    /// <summary>

    /// 取得一个文本文件流的编码方式。

    /// </summary>

    /// <param name="stream">文本文件流。</param>

    /// <param name="defaultEncoding">默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。</param>

    /// <returns></returns>

    public static Encoding GetEncoding(FileStream stream, Encoding defaultEncoding)

    {

      Encoding targetEncoding = defaultEncoding;

      if(stream != null && stream.Length >= 2)

      {

        //保存文件流的前4个字节

        byte byte1 = 0;

        byte byte2 = 0;

        byte byte3 = 0;

        byte byte4 = 0;

        //保存当前Seek位置

        long origPos = stream.Seek(0, SeekOrigin.Begin);

        stream.Seek(0, SeekOrigin.Begin);

        int nByte = stream.ReadByte();

        byte1 = Convert.ToByte(nByte);

        byte2 = Convert.ToByte(stream.ReadByte());

        if(stream.Length >= 3)

        {

          byte3 = Convert.ToByte(stream.ReadByte());

        }

        if(stream.Length >= 4)

        {

          byte4 = Convert.ToByte(stream.ReadByte());

        }

        //根据文件流的前4个字节判断Encoding

        //Unicode {0xFF, 0xFE};

        //BE-Unicode {0xFE, 0xFF};

        //UTF8 = {0xEF, 0xBB, 0xBF};

        if(byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe

        {

          targetEncoding = Encoding.BigEndianUnicode;

        }

        if(byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode

        {

          targetEncoding = Encoding.Unicode;

        }

        if(byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8

        {

          targetEncoding = Encoding.UTF8;

        }

        //恢复Seek位置   

        stream.Seek(origPos, SeekOrigin.Begin);

      }

      return targetEncoding;

    }

 }
}

posted on 2006-12-23 11:49  hnsjack(痞子龍)  阅读(131)  评论(0编辑  收藏  举报

导航