`
cuijiemin
  • 浏览: 265415 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C#处理文本文件

阅读更多
文本文件是一种常用的文件格式,所以如何处理文本文件也就成为编程的一个重点。本文就来探讨一下用C#是如何来处理文本文件。其内容重点就是如何读取文本文件内容、如何改变文本文件的内容,以及如何用C#来实现对读取后的文本文件的打印预览和打印。

一.本文程序设计和运行的软件环境:

(1).微软公司视窗2000服务器版

(2)..NetFrameWorkSDKBeta2

二.C#处理文本文件的一些重要环节:

(1).如何读取文本文件内容:

在本文介绍的程序中,是把读取的文本文件,用一个richTextBox组件显示出来。要读取文本文件,必须使用到"StreamReader"类,这个类是由名字空间"System.IO"中定义的。通过"StreamReader"类的"ReadLine()"方法,就可以读取打开数据流当前行的数据了。下面代码实现的功能就是读取"C:\file.txt"并在richTextBox1组件中显示出来:

FileStreamfs=newFileStream("C:\\file.txt",FileMode.Open,FileAccess.Read);
StreamReaderm_streamReader=newStreamReader(fs);
//使用StreamReader类来读取文件
m_streamReader.BaseStream.Seek(0,SeekOrigin.Begin);
//从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容
this.richTextBox1.Text="";
stringstrLine=m_streamReader.ReadLine();
while(strLine!=null)
{
this.richTextBox1.Text+=strLine+"\n";
strLine=m_streamReader.ReadLine();
}
//关闭此StreamReader对象
m_streamReader.Close();


(2).如何改变文本文件中数据内容:

在本文介绍的程序中,改变文本文件数据内容的功能是通过改变richTextBox1中的内容来实现的,当richTextBox1这的内容改变后,按动"另存为",就把richTextBox1中内容存储到指定的文本文件中了。要想改变文本文件内容,要使用到"StreamWriter"类,这个类和"StreamReader"一样,都是由"System.IO"名字空间来定义的。通过"StreamWriter"类的"Write()"方法,就可以轻松实现文本文件内容的更改了。下面代码的功能是:如果"C"盘存在"file.txt",则把richTextBox1中的内容写入到"file.txt"中,如果不存在,则创建此文件,然后在写入文本数据。

//创建一个文件流,用以写入或者创建一个StreamWriter
FileStreamfs=newFileStream("C\\file.txt",FileMode.OpenOrCreate,FileAccess.Write);
StreamWriterm_streamWriter=newStreamWriter(fs);
m_streamWriter.Flush();
//使用StreamWriter来往文件中写入内容
m_streamWriter.BaseStream.Seek(0,SeekOrigin.Begin);
//把richTextBox1中的内容写入文件
m_streamWriter.Write(richTextBox1.Text);
//关闭此文件
m_streamWriter.Flush();
m_streamWriter.Close();


从上面这二个代码可以,写入数据比起读取数据要显得容易些。

(3).如何实现打印预览:

打印预览是通过打印预览对话框来实现的,实现对读取得文本文件的打印预览,最为重要的就是要通知打印预览对话框所要预览的文件的内容。下面代码就是把richTextBox1中显示的内容,通过打印预览对话框显示出来:

stringstrText=richTextBox1.Text;
StringReadermyReader=newStringReader(strText);
PrintPreviewDialogprintPreviewDialog1=newPrintPreviewDialog();
printPreviewDialog1.Document=ThePrintDocument;
printPreviewDialog1.FormBorderStyle=FormBorderStyle.Fixed3D;
printPreviewDialog1.ShowDialog();


(4).如何打印文件:

在名字空间"System.Drawing.Printing"中定义了一个类"PrintDocument",通过调用此类的"Print"方法就可以触发在此名字空间中封装的另外一个事件"PrintPage"。在此事件中设定要打印的文档内容,从而实现队文本文件的打印操作。下面代码是调用"PrintDocument"的"Print"方法,和调用事件"PrintPage"来打印richTextBox1中的内容:

ThePrintDocument.Print();//其中ThePrintDocument是"PrintDocument"类的一个对象

下列代码是设定打印内容即打印richTextBox1中的内容:

floatlinesPerPage=0;
floatyPosition=0;
intcount=0;
floatleftMargin=ev.MarginBounds.Left;
floattopMargin=ev.MarginBounds.Top;
stringline=null;
FontprintFont=richTextBox1.Font;
SolidBrushmyBrush=newSolidBrush(Color.Black);
//计算每一页打印多少行
linesPerPage=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);
//重复使用StringReader对象,打印出richTextBox1中的所有内容
while(count<linesPerPage&&((line=myReader.ReadLine())!=null))
{
//计算出要打印的下一行所基于页面的位置
yPosition=topMargin+(count*printFont.GetHeight(ev.Graphics));
//打印出richTextBox1中的下一行内容
ev.Graphics.DrawString(line,printFont,myBrush,leftMargin,yPosition,newStringFormat());
count++;
}
//判断如果还要下一页,则继续打印
if(line!=null)
ev.HasMorePages=true;
else
ev.HasMorePages=false;
myBrush.Dispose();


注释:由于在上述的代码中省掉了这些类所对于地名字空间,所以要想成功的编译和运行上述代码,就要在程序头部要导入所使用的名字空间。

三.用C#处理文本文件的完整源程序代码(control.cs):

掌握了上面这些关键步骤,就可以方便的得到用C#来处理文本文件的一个完整的源程序,具体如下:

usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.IO;
usingSystem.Drawing.Printing;
publicclassForm1:Form
{
privateRichTextBoxrichTextBox1;
privateButtonbutton1;
privateButtonbutton2;
privateButtonbutton3;
privateButtonbutton4;
privateButtonbutton5;
privateOpenFileDialogopenFileDialog1;
privateSaveFileDialogsaveFileDialog1;
privatePrintDialogprintDialog1;
privatePrintDocumentThePrintDocument;
privatePrintPreviewDialogprintPreviewDialog1;
privateStringReadermyReader;
privateSystem.ComponentModel.Containercomponents=null;

publicForm1()
{
//初始化窗体中的各个组件
InitializeComponent();
}
//清除程序中使用多的资源
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
privatevoidInitializeComponent()
{
richTextBox1=newRichTextBox();
button1=newButton();
button2=newButton();
button3=newButton();
button4=newButton();
button5=newButton();
saveFileDialog1=newSaveFileDialog();
openFileDialog1=newOpenFileDialog();
printPreviewDialog1=newPrintPreviewDialog();
printDialog1=newPrintDialog();
ThePrintDocument=newPrintDocument();
ThePrintDocument.PrintPage+=newPrintPageEventHandler(ThePrintDocument_PrintPage);
SuspendLayout();
richTextBox1.Anchor=AnchorStyles.None;
richTextBox1.Name="richTextBox1";
richTextBox1.Size=newSize(448,280);
richTextBox1.TabIndex=0;
richTextBox1.Text="";
button1.Anchor=AnchorStyles.None;
button1.Location=newPoint(41,289);
button1.Name="button1";
button1.Size=newSize(48,30);
button1.TabIndex=1;
button1.Text="打开";
button1.Click+=newSystem.EventHandler(button1_Click);
button2.Anchor=AnchorStyles.None;
button2.Location=newPoint(274,288);
button2.Name="button2";
button2.Size=newSize(48,30);
button2.TabIndex=4;
button2.Text="预览";
button2.Click+=newSystem.EventHandler(button2_Click);
button3.Anchor=AnchorStyles.None;
button3.Location=newPoint(108,288);
button3.Name="button3";
button3.Size=newSize(48,30);
button3.TabIndex=2;
button3.Text="保存";
button3.Click+=newSystem.EventHandler(button3_Click);
button4.Anchor=AnchorStyles.None;
button4.Location=newPoint(174,288);
button4.Name="button4";
button4.Size=newSize(80,30);
button4.TabIndex=3;
button4.Text="打印机设置";
button4.Click+=newSystem.EventHandler(button4_Click);
button5.Anchor=AnchorStyles.None;
button5.Location=newPoint(345,288);
button5.Name="button5";
button5.Size=newSize(48,30);
button5.TabIndex=5;
button5.Text="打印";
button5.Click+=newSystem.EventHandler(button5_Click);
saveFileDialog1.DefaultExt="*.txt";
saveFileDialog1.FileName="file.txt";
saveFileDialog1.InitialDirectory="c:\\";
saveFileDialog1.Title="另存为!";
openFileDialog1.DefaultExt="*.txt";
openFileDialog1.FileName="file.txt";
openFileDialog1.InitialDirectory="c:\\";
openFileDialog1.Title="打开文本文件!";
AutoScaleBaseSize=newSize(6,14);
ClientSize=newSize(448,325);
this.Controls.Add(button1);
this.Controls.Add(button2);
this.Controls.Add(button3);
this.Controls.Add(button4);
this.Controls.Add(button5);
this.Controls.Add(richTextBox1);

this.MaximizeBox=false;
this.Name="Form1";
this.Text="C#来操作文本文件";
this.ResumeLayout(false);
}
staticvoidMain()
{
Application.Run(newForm1());
}

privatevoidbutton1_Click(objectsender,System.EventArgse)
{
try
{
if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
FileStreamfs=newFileStream(openFileDialog1.FileName,FileMode.Open,FileAccess.Read);
StreamReaderm_streamReader=newStreamReader(fs);
//使用StreamReader类来读取文件
m_streamReader.BaseStream.Seek(0,SeekOrigin.Begin);
//从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容
this.richTextBox1.Text="";
stringstrLine=m_streamReader.ReadLine();
while(strLine!=null)
{
this.richTextBox1.Text+=strLine+"\n";
strLine=m_streamReader.ReadLine();
}
//关闭此StreamReader对象
m_streamReader.Close();
}
}
catch(Exceptionem)
{
Console.WriteLine(em.Message.ToString());
}

}

privatevoidbutton3_Click(objectsender,System.EventArgse)
{
try
{
//获得另存为的文件名称
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
//创建一个文件流,用以写入或者创建一个StreamWriter
FileStreamfs=newFileStream(@saveFileDialog1.FileName,FileMode.OpenOrCreate,FileAccess.Write);
StreamWriterm_streamWriter=newStreamWriter(fs);
m_streamWriter.Flush();

//使用StreamWriter来往文件中写入内容
m_streamWriter.BaseStream.Seek(0,SeekOrigin.Begin);
//把richTextBox1中的内容写入文件
m_streamWriter.Write(richTextBox1.Text);
//关闭此文件
m_streamWriter.Flush();
m_streamWriter.Close();
}
}
catch(Exceptionem)
{
Console.WriteLine(em.Message.ToString());
}
}

privatevoidbutton4_Click(objectsender,System.EventArgse)
{
printDialog1.Document=ThePrintDocument;
printDialog1.ShowDialog();
}
//预览打印文档
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
try
{
stringstrText=richTextBox1.Text;
myReader=newStringReader(strText);
PrintPreviewDialogprintPreviewDialog1=newPrintPreviewDialog();
printPreviewDialog1.Document=ThePrintDocument;
printPreviewDialog1.FormBorderStyle=FormBorderStyle.Fixed3D;
printPreviewDialog1.ShowDialog();
}
catch(Exceptionexp)
{
Console.WriteLine(exp.Message.ToString());
}
}
//打印richTextBox1中的内容
privatevoidbutton5_Click(objectsender,System.EventArgse)
{
printDialog1.Document=ThePrintDocument;
stringstrText=richTextBox1.Text;
myReader=newStringReader(strText);
if(printDialog1.ShowDialog()==DialogResult.OK)
{
ThePrintDocument.Print();
}
}
protectedvoidThePrintDocument_PrintPage(objectsender,PrintPageEventArgsev)
{
floatlinesPerPage=0;
floatyPosition=0;
intcount=0;
floatleftMargin=ev.MarginBounds.Left;
floattopMargin=ev.MarginBounds.Top;
stringline=null;
FontprintFont=richTextBox1.Font;
SolidBrushmyBrush=newSolidBrush(Color.Black);
//计算每一页打印多少行
linesPerPage=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);
//重复使用StringReader对象,打印出richTextBox1中的所有内容
while(count<linesPerPage&&((line=myReader.ReadLine())!=null))
{
//计算出要打印的下一行所基于页面的位置
yPosition=topMargin+(count*printFont.GetHeight(ev.Graphics));
//打印出richTextBox1中的下一行内容
ev.Graphics.DrawString(line,printFont,myBrush,leftMargin,yPosition,newStringFormat());
count++;
}
//判断如果还要下一页,则继续打印
if(line!=null)
ev.HasMorePages=true;
else
ev.HasMorePages=false;
myBrush.Dispose();
}
}


四.总结:

本文虽然只是介绍了用C#处理文本文件,但其实对C#处理其他文件也有很多的参考价值,这是因为在名字空间"System.IO"中定义的用以处理其他文件的类的结构和用以处理文本文件的类的结构有很多是相同的。希望本文对你用C#进行文件方面的编程有所帮助。
分享到:
评论

相关推荐

    C#处理文本文件和打印和打印预览

    总结,C#处理文本文件涉及读取、修改和保存文件内容,而打印预览则依赖于`PrintPreviewDialog`和`PrintDocument`类。通过这些基础知识,开发者可以构建出强大的文本处理和打印应用程序,满足日常的开发需求。

    C#处理文本文件和实现MD5的源码与说明

    根据给定的文件信息,以下是对“C#处理文本文件和实现MD5”的知识点的详细解析: ### C#中的MD5实现 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,用于生成固定长度(通常是128位)的散列值或消息...

    C#保存txt文本文件

    总的来说,C#提供了一套强大且易用的API来处理文本文件,无论是在小型项目还是大型应用程序中,都能轻松实现txt文本的保存功能。通过熟练掌握这些基础,开发者能够高效地处理文本数据,满足各种业务需求。

    C#实现文本文档功能 源码

    这个源码包很可能是提供了一种实现方式,让我们来详细探讨一下C#中处理文本文件的基本概念和常用方法。 1. **文件操作基础** - `using System.IO;`:在C#中处理文件,首先需要引入`System.IO`命名空间,它包含了...

    C#处理文本文件TXT实例详解

    本文实例讲述了C#处理文本文件TXT的方法。分享给大家供大家参考。具体分析如下: 1. 如何读取文本文件内容: 这里介绍的程序中,是把读取的文本文件,用一个richTextBox组件显示出来。要读取文本文件,必须使用到”...

    C#读写文本文件(不会产生乱码)[初学者用]

    本文将深入探讨如何使用C#进行文本文件的读写,并确保在处理不同编码格式时不会产生乱码,这对于跨平台或处理多语言内容的应用来说尤其重要。 一、基本概念 1. 文件流:在C#中,文件操作是通过`System.IO`命名空间...

    C# CE 文本处理

    1. `System.IO`命名空间:C#处理文本文件主要依赖于`System.IO`命名空间,它提供了许多类和方法,如`StreamReader`、`StreamWriter`和`File`等,用于读取、写入和操作文件。 2. `StreamReader`和`StreamWriter`:这...

    小程序-C#将文本文件读写并对部分内容匹配和替换

    总结起来,C#提供了强大而灵活的工具来处理文本文件,包括读取、写入、查找和替换内容。在ASP.NET环境中,这些操作可以结合数据库操作,实现更复杂的功能。同时,不要忘记参与社区分享,共同推动技术的进步。

    C#多文本文档编辑器

    【C#多文本文档编辑器】是一款基于C#编程语言开发的文本编辑软件,它提供了丰富的文本编辑功能,如文本的创建、修改、排版和打印等,旨在为用户提供一个简洁而实用的文本处理环境。该编辑器在启动时引入了安全机制,...

    c# 对文本文档操作 写入 读取 读取指定行 删除指定行 查询

    在C#编程中,对文本文档的操作是常见的任务,主要涉及到写入、读取、读取指定行、删除指定行以及查询等操作。本文将详细介绍这些知识点,并以读取TXT文件为例,展示如何实现以指定条件读取内容并转换为DataTable。 ...

    C#文本文件读取和写入(文件、目录操作)

    本文将深入探讨如何使用C#进行文本文件的读取、写入、以及文件和目录的相关操作,以WindowForm窗体应用程序为例。 首先,我们关注的是文本文件的读取和写入。在C#中,`System.IO`命名空间提供了丰富的类来处理文件...

    C#编写病毒文本文档

    【标题】:“C#编写病毒文本文档” 在IT领域,病毒编程是一个敏感的话题,它涉及到计算机安全和恶意软件的创建。尽管标题提及的是“病毒文本文档”,但在这里我们将探讨的是如何使用C#编程语言来理解病毒的基本原理...

    C#程序 文本文档的设计

    在C#编程中,设计文本文档涉及到对文本文件的读取、写入和操作。C#提供了多种方法来处理文本文档,使得开发者能够轻松地实现数据存储和信息记录。下面将详细介绍C#中涉及文本文档设计的相关知识点。 1. 文件流...

    C#文本文档编辑器

    总结,创建一个C#文本文档编辑器涉及到了C#的基础语法、Windows应用程序开发、文件操作、文本处理和用户交互等多个方面。对于新手而言,这是一个综合性的学习项目,有助于提升编程技能和理解面向对象编程的思想。...

    c# 文本比较功能

    在C#编程语言中,文本比较是一个常见的任务,特别是在开发ASP.NET Web应用程序、数据库操作(如SQL查询)或处理大量文本数据时...通过不断学习和实践,开发者可以更高效地处理文本数据,提升软件项目的质量和用户体验。

    C#356-处理文本文件源代码

    在C#编程中,处理文本文件是一项常见的任务,无论是在数据存储、日志记录还是文件交互等场景。本文将深入探讨C#中处理文本文件的关键知识点,并基于标题和描述提供的信息,提供源代码示例。 1. **打开文本文件** ...

    C#处理word文件汇总

    本主题聚焦于“C#处理word文件汇总”,涵盖了如何利用C#对Microsoft Word文档进行解析、读取以及处理其中的图片和文本。下面将详细介绍这些知识点。 1. **C#与Microsoft Office Interop**: C#可以借助Microsoft ...

    基于C#的文本相似度检测

    本项目“基于C#的文本相似度检测”利用了向量空间模型(Vector Space Model, VSM),这是一种经典的文本表示和比较方法,特别适用于处理大量文档的相似性分析。以下是关于该项目和相关知识点的详细解释: 1. **C#...

    C#操作Txt文件源码2019

    本资源“C#操作Txt文件源码2019”提供了关于使用C#处理文本文件,特别是TXT文件的代码示例。下面将详细探讨C#中操作TXT文件的相关知识点。 1. **文件流(FileStream)**:在C#中,操作文件的基本方法是通过`System.IO...

Global site tag (gtag.js) - Google Analytics