版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinForm程序设计与实践第5章输入与输出学习目标:理解文件与流的基本概念了解文件与目录的基本知识及其常用的类掌握文件流读写方法5.1概述文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。C#中文件处理技术称为I/O技术,即输入与输出技术,或称为流处理技术或文件流处理技术。5.1.1文件与流
文件是指在各种存储介质上永久保存的数据的有序集合,并以一个具体的名称对应,它是进行文件读/写操作的基本对象。流是字节序列的抽象概念,流提供一种向后续存储器写入字节或从后续存储器读取字节的方法。5.1.2System.IO命名空间System.IO命名空间包含允许读/写文件和数据流的类型以及提供基本文件和目录支持的类型,因此在使用这些类时需要引入System.IO命名空间。类名功能和用途Directory、DirectoryInfo创建、删除并移动目录,通过属性获取特定目录的相关信息File、FileInfo创建、删除并移动文件,通过属性获取特定文件的相关信息StreamReader、StreamWriter读写文本数据信息BinaryReader、BinaryWriter读写二进制数据5.2目录操作5.2.1Directory类Directory类是静态类,提供了许多静态方法用于对目录进行操作,例如创建、删除和移动目录等。方法说明CreateDirectory()创建指定路径的目录Exists()判断目录是否存在GetDirectoryRoot()获取指定目录的根目录GetDirectories()获取当前目录之下的Directory对象数组GetFiles()获取当前目录下的File对象数组Delete()删除指定目录及其目录下的所有文件Move()将指定目录移动到新的位置5.2.1Directory类【例5-1】目录创建程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序DirectoryApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽1个Label控件、1个TextBox控件和1个Button控件到窗体设计区,并调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。表5-3列出了窗体及控件属性。窗体和控件属性属性值Form1Text创建目录label1Name请输入创建目录名称:textBox1NametxtDirNamebutton1NamebtnMakeText创建5.2.1Directory类(4)双击“创建”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnMake_Click(objectsender,EventArgse){
stringpath=txtDirName.Text;
if(Directory.Exists(path)){
MessageBox.Show(path+"目录已经存在");}
else{
Directory.CreateDirectory(path);
MessageBox.Show(path+"目录创建成功");}}5.2.1Directory类(5)在解决方案资源管理器中右击DirectoryApplication项目,将其设为启动项目。(6)编译并运行,运行结果如图5-1所示。5.2.2DirectoryInfo类DirectoryInfo类的功能与Directory类相似,不同的是的DirectoryInfo类是一个实例类,所有方法都是实例方法。属性说明Name获取当前DirectoryInfo对象的名称Root获取路径的根目录Parent获取指定子目录的父目录FullName获取目录或文件的完整目录Exists判断指定目录是否存在5.2.2DirectoryInfo类窗体和控件属性属性值Form1Text浏览目录label1Name请输入目录名称:textBox1NametxtDirNamelabel2Text目录名称:textBox2NametxtNamelabel3Text根目录名称:textBox3NametxtRootlabel4Text父目录名称:textBox4NametxtParentgroupBox1Text详细信息groupBox2Text目录列表button1NamebtnBrowseText浏览listBox1NamelistGetDirectories【例5-2】目录浏览程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序DirectoryInfoApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽2个GroupBox控件、4个Label控件、4个TextBox控件、1个ListBox控件和1个Button控件到窗体设计区,调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。表5-5列出了窗体及控件属性。(4)定义一个dirList()方法,用于在列表框中循环输出指定目录中的所有子目录。public
voiddirList(DirectoryInfodir){listGetDirectories.Items.Clear();
DirectoryInfo[]dirs=dir.GetDirectories();
for(inti=0;i<dirs.Length;i++){listGetDirectories.Items.Add(dirs[i]);}}5.2.2DirectoryInfo类5.2.2DirectoryInfo类(5)双击“浏览”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnBrowse_Click(objectsender,EventArgse){
stringpath=txtDirName.Text;
if(!string.IsNullOrEmpty(path)){
DirectoryInfodir=new
DirectoryInfo(path);txtName.Text=dir.Name;txtRoot.Text=dir.Root.ToString();txtParent.Text=dir.Parent.ToString();
//输出子目录dirList(dir);}
else{
MessageBox.Show("请输入目录名称!");}}5.2.2DirectoryInfo类(6)在解决方案资源管理器中右击DirectoryInfoApplication项目,将其设为启动项目。(7)编译并运行,运行结果如图5-2所示。File类和FileInfo类主要提供有关文件的各种操作,包括创建、复制、移动和删除文件等。5.3.1File类File类是一个静态类,它提供了许多静态方法,用于处理文件。5.3文件操作方法说明Create()创建文件Open()打开指定路径上的文件,返回FileStream对象Copy()将文件复制到指定位置Move()将指定文件移动到新位置Delete()删除文件Exists()判断指定文件是否存在【例5-3】文件删除程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序FileApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽1个Label控件、1个TextBox控件和1个Button控件到窗体设计区,并调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。5.3文件操作窗体和控件属性属性值Form1Text删除文件label1Name请输入删除文件名称:textBox1NametxtDirNamebutton1NamebtnDeleteText删除5.3文件操作(4)双击“删除”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnDelete_Click(objectsender,EventArgse){
stringpath=txtDirName.Text;
if(File.Exists(path)){
File.Delete(path);
MessageBox.Show("文件删除完毕!");}
else{
Console.WriteLine("文件不存在!");}}(5)在解决方案资源管理器中右击FileApplication项目,将其设为启动项目。(6)编译并运行,运行结果如图5-3所示。5.3文件操作FileInfo类与File类有些类似,它们都可以对磁盘上的文件进行操作。不同的是FileInfo类是实例类,所有的方法必须实例化对象后才能调用。5.3.2FileInfo类属性说明Directory获取父目录的实例DirectoryName获取表示目录的完整路径的字符串FullName获取目录或文件的完整目录Length获取当前文件的大小【例5-4】文件浏览程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序FileInfoApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽1个GroupBox控件、3个Label控件、3个TextBox控件和1个Button控件到窗体设计区,调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。表5-9列出了窗体及控件属性。5.3.2FileInfo类窗体和控件属性属性值Form1Text浏览文件label1Name请输入文件名称:textBox1NametxtFileNamelabel2Text文件当前目录:textBox2NametxtDirlabel3Text文件大小:textBox4NametxtSizegroupBox1Text详细信息button1NamebtnBrowseText浏览5.3.2FileInfo类(4)双击“浏览”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnBrowse_Click(objectsender,EventArgse){
FileInfofile=new
FileInfo(txtFileName.Text);
if(file.Exists){ txtDir.Text=file.Directory.ToString();txtSize.Text=file.Length.ToString();}
else{file.Create();
MessageBox.Show("文件已经创建成功!");}}(5)在解决方案资源管理器中右击FileInfoApplication项目,将其设为启动项目。(6)编译并运行,运行结果如图5-4所示。5.3.2FileInfo类数据流(也称为流)是一个用于传输数据的对象。数据的传输有两个方向,如果是数据从外部源传输到程序中,就称为读取流;如果是数据从程序传输到外部源,就称为写入流。在System.IO命名空间中,对文件的读写操作是依靠流操作进行的。也就是说.NET中一个被打开以后的文件就是一个数据流,对已经找开的文件进行读写操作就是在对内存中的一个数据流进行读写操作。5.4文件读写文本文件是一种纯文本数据构成的文件。实际上,文本文件只保存了字符的编码。.NETFramework支持多种编码,包括ASCII、UTF7、UTF8、Unicode和UTF32等。在.NETFramework中,读写文本文件可以使用流读取器StreamReader和流写入器StreamWriter。1.StreamReader类StreamReader类用于从文件中读取数据,该类是一个通用类,可用于任何流。StreamReader类以一种特定的编码输入字符,默认的编码为UTF8,UTF8可以正确处理Unicode字符并在操作系统的本地化版本上提供一致的结果。5.4.1读写文本文件方法说明Close()关闭StreamReader对象和基础流Dispose()释放所有StreamReader对象资源Peek()返回下一个可用的字符Read()读取输入流中的下一个字符或下一组字符ReadLine()从数据流中读取一行数据,并作为字符串返回ReadToEnd()从流的当前位置到末尾读取流2.StreamWriter类StreamWriter类用于将字符和字符串写入文件,它实际上也是先转换成FileStream对象,然后向文件中写入数据的,所以在创建对象时可以通过FileStream对象来创建StreamWriter对象,同时也可以直接创建StreamWriter对象。StreamWriter默认使用UTF8编码。5.4.1读写文本文件方法说明Close()关闭StreamWriter对象和基础流Dispose()释放所有StreamWriter对象资源Flush()清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流Write()写入流WriteLine()写入指定的某些数据,后跟行结束符【例5-5】简单日志程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序StreamApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽2个Label、2个TextBox控件和2个Button控件到窗体设计区,调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。表5-12列出了窗体及控件属性。5.4.1读写文本文件窗体和控件属性属性值Form1Text简单日志label1Name请输入日志内容:textBox1NametxtSourceMultiLinetruelabel2Text已有的日志内容:textBox2NametxtShowMultiLinetrueReadOnlytruebutton1NamebtnSaveText保存button2NamebtnShowText显示5.4.1读写文本文件(4)双击“保存”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnSave_Click(objectsender,EventArgse){
StreamWriterwriter=new
StreamWriter(@"D:\示例代码\chapter05\日志.txt",true);writer.WriteLine(DateTime.Now.ToString());writer.WriteLine(txtSource.Text);writer.Close();
MessageBox.Show("日志保存成功!");}5.4.1读写文本文件(5)双击“显示”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnShow_Click(objectsender,EventArgse){
StreamReaderreader=new
StreamReader(@"D:\示例代码\chapter05\日志.txt");txtShow.Text=reader.ReadToEnd();reader.Close();}(6)在解决方案资源管理器中右击StreamApplication项目,将其设为启动项目。(7)编译并运行,运行结果如图5-5所示。5.4.2读写二进制文件在.NETFramework中,读写二进制文件可以使用流读取器BinaryReader和流写入器BinaryWriter。二进制文件是以二进制代码形式存储的文件,数据存储为字节序列。二进制文件可以包含图像、声音、文本或编译之后的程序代码。1.BinaryReader类BinaryReader类用特定的编码将基元数据类型读作二进制值。方法说明Close()关闭BinaryReader
对象和基础流Dispose()释放
BinaryReader
类的当前实例所使用的所有资源PeekChar()返回下一个可用的字符,并且不提升字节或字符的位置Read()从基础流中读取字符,并根据所使用的
Encoding
和从流中读取的特定字符,提升流的当前位置ReadByte()从当前流中读取下一个字节,并使流的当前位置提升1个字节ReadString()从当前流中读取一个字符串。
字符串有长度前缀,一次7位地被编码为整数5.4.2读写二进制文件2.BinaryWriter类BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。方法说明Close()关闭当前
BinaryWriter
和基础流Dispose()释放
BinaryWriter
类的当前实例所使用的所有资源ToString()返回表示当前对象的字符串Write()将值写入当前流5.4.2读写二进制文件【例5-6】简单学生管理程序。【操作步骤】(1)启动VS,新建一个Windows窗体应用程序BinaryApplication。(2)双击Form1.cs,切换到设计视图,从工具栏中拖拽3个Label、2个TextBox控件、2个RadioButton、1个ListBox和2个Button控件到窗体设计区,调整控件大小进行布局。(3)在窗体设计区中右击窗体Form1和每一个控件,设置窗体和控件的相关属性。表5-14列出了窗体及控件属性。窗体和控件属性属性值Form1Text学生信息管理label1Name学号:textBox1NametxtNumlabel2Text姓名:textBox2NametxtNamelabel3Text性别:radioButton1NamerdbMaleText男radioButton2NamerdbFemaleText女listBox1NamelistShowbutton1NamebtnSaveText保存button2NamebtnShowText显示5.4.2读写二进制文件(4)双击“保存”按钮,为其添加单击事件处理程序,程序代码如下。
private
voidbtnSave_Click(objectsender,EventArgse){
FileStreamfs=new
FileStream(@"D:\示例代码\chapter05\student.dat",FileMode.Append,FileAccess.Write);
//通过文件流写文件
BinaryWriterwriter=new
BinaryWriter(fs);
//写入一个整数writer.Write(Int32.Parse(txtNum.Text));
//写入一个字符串writer.Write(txtName.Text);
boolisMale;
if(rdbMale.Checked){isMale=true;}
else{isMale=false;}
//写入一个bool值writer.Write(isMale);fs.Close();writer.Close();}5.4.2读写二进制文件(5)双击“显示”按钮,为其添加单击事件处理程序,程序代码如下。
private
void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026酿酒行业市场现状调研及未来行业投资评估规划分析研究报告
- 2026中国农业无人机植保作业效率与精准施药技术经济性评估报告
- 2026中国智能机器人技术竞赛培训市场发展策略报告
- 2026瑞士电动自行车行业供需分析创作经营规划市场热点
- 2026中国医疗设备研发业竞争格局及市场发展趋势研究
- 2026中国运动Nutrition保健品市场营销传播与品牌建设策略研究
- 2026燃气轮机设备制造行业市场健康发展及产业投资分析
- 2026食品加工机械制造行业供需现状调研及投资评估规划全面研究报告
- 2026中国锑铋行业市场深度调研及发展趋势与投资战略研究报告
- 2026Fast芯片组行业政策环境与供应链优化策略分析
- 学龄前儿童心理行为发育问题专题讲座课件
- 生物制药行业安全培训课件
- 《矿山机电安全管理》课件
- 新版工作安全分析表(含99项工作内容)
- 企业员工线上培训实施方案
- 多学科团队合作安宁疗护方案
- 电梯日管控、周排查、月调度内容表格
- DL-T5001-2014火力发电厂工程测量技术规程
- 塔吊基础加固(格构柱)验收表
- 中考物理总复习《内能》专项测试卷(带有答案)
- 运用PDCA血透室导管感染率
评论
0/150
提交评论