C#處理文字檔案概述

fangfeng0802發表於2010-04-12

C#處理文字檔案

    C#處理文字檔案是一種常用的檔案格式,所以如何處理文字檔案也就成為程式設計的一個重點。本文就來探討一下用C#是如何來處理文字檔案。其內容重點就是如何讀取文字檔案內容、如何改變文字檔案的內容,以及如何用C#來實現對讀取後的文字檔案的列印預覽和列印。

一. C#處理文字檔案的一些重要環節:

    (1.如何讀取文字檔案內容:

    在本文介紹的程式中,是把讀取的文字檔案,用一個richTextBox元件顯示出來。要讀取文字檔案,必須使用到"StreamReader"類,這個類是由名字空間"System.IO"中定義的。通過"StreamReader"類的"ReadLine ( )"方法,就可以讀取開啟資料流當前行的資料了。下面程式碼實現的功能就是讀取"C:/file.txt"並在richTextBox1元件中顯示出來:

FileStream fs = new FileStream ( "C://file.txt"   , FileMode.Open , FileAccess.Read ) ;  

    StreamReader m_streamReader = new StreamReader ( fs ) ;  

  //使用StreamReader類來讀取檔案  

  m_streamReader.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;  

    // 從資料流中讀取每一行,直到檔案的最後一行,並在richTextBox1中顯示出內容  

    this.richTextBox1.Text = "" ;  

    string strLine = m_streamReader.ReadLine ( ) ;  

    while ( strLine != null )  

    {  

10         this.richTextBox1.Text += strLine + "/n" ;  

11         strLine = m_streamReader.ReadLine ( ) ;  

12     }  

13     //關閉此StreamReader物件  

14     m_streamReader.Close ( ) ;    

2.如何改變文字檔案中資料內容:

    在本文介紹的程式中,改變文字檔案資料內容的功能是通過改變richTextBox1中的內容來實現的,當richTextBox1這的內容改變後,按動"另存為",就把richTextBox1中內容儲存到指定的文字檔案中了。要想改變文字檔案內容,要使用到"StreamWriter"類,這個類和"StreamReader"一樣,都是由"System.IO"名字空間來定義的。通過"StreamWriter"類的"Write ( )"方法,就可以輕鬆實現文字檔案內容的更改了。下面程式碼的功能是:如果"C"盤存在"file.txt",則把richTextBox1中的內容寫入到"file.txt"中,如果不存在,則建立此檔案,然後在寫入文字資料。

15 //建立一個檔案流,用以寫入或者建立一個StreamWriter  

16   FileStream fs = new FileStream ( "C//file.txt"   , 
FileMode.OpenOrCreate , FileAccess.Write ) ;  

17     StreamWriter m_streamWriter = new StreamWriter ( fs ) ;  

18     m_streamWriter.Flush ( ) ;  

19     // 使用StreamWriter來往檔案中寫入內容  

20     m_streamWriter.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;  

21     // richTextBox1中的內容寫入檔案  

22     m_streamWriter.Write ( richTextBox1.Text ) ;  

23     //關閉此檔案  

24     m_streamWriter.Flush ( ) ;  

25     m_streamWriter.Close ( ) ;    

    從上面這二個程式碼可以,寫入資料比起讀取資料要顯得容易些。

3.如何實現列印預覽:

    列印預覽是通過列印預覽對話方塊來實現的,實現對讀取得文字檔案的列印預覽,最為重要的就是要通知列印預覽對話方塊所要預覽的檔案的內容。下面程式碼就是把richTextBox1中顯示的內容,通過列印預覽對話方塊顯示出來:

26 string strText = richTextBox1.Text ;  

27   StringReader myReader = new StringReader ( strText ) ;  

28   PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog ( ) ;  

29   printPreviewDialog1.Document = ThePrintDocument   ;  

30   printPreviewDialog1.FormBorderStyle = FormBorderStyle.Fixed3D   ;  

31   printPreviewDialog1.ShowDialog ( ) ;    

4.如何列印檔案:

    在名字空間"System.Drawing.Printing"中定義了一個類"PrintDocument",通過呼叫此類的"Print"方法就可以觸發在此名字空間中封裝的另外一個事件"PrintPage"。在此事件中設定要列印的文件內容,從而實現隊文字檔案的列印操作。下面程式碼是呼叫"PrintDocument""Print"方法,和呼叫事件"PrintPage"來列印richTextBox1中的內容:

    ThePrintDocument.Print ( ) ; //其中ThePrintDocument"PrintDocument"類的一個物件

    下列程式碼是設定列印內容即列印richTextBox1中的內容:

32 float linesPerPage=0;  

33 float yPosition=0;  

34 int count=0;  

35 float leftMargin=ev.MarginBounds.Left;  

36 float topMargin=ev.MarginBounds.Top;  

37 string line=null;  

38 Font printFont=richTextBox1.Font;  

39 SolidBrush myBrush=new SolidBrush(Color.Black);  

40 //計算每一頁列印多少行  

41 linesPerPage=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);  

42 //重複使用StringReader物件,列印出richTextBox1中的所有內容  

43 while(count<linesPerPage&&((line=myReader.ReadLine())!=null))  

44 {  

45 //計算出要列印的下一行所基於頁面的位置  

46 yPosition=topMargin+(count*printFont.GetHeight(ev.Graphics));  

47 //列印出richTextBox1中的下一行內容  

48 ev.Graphics.DrawString(line,printFont,myBrush,leftMargin,
yPosition,newStringFormat());  

49 count++;  

50 }  

51 //判斷如果還要下一頁,則繼續列印  

52 if(line!=null)  

53 ev.HasMorePages=true;  

54 else  

55 ev.HasMorePages=false;  

myBrush.Dispose(); 

相關文章