




免费预览已结束,剩余35页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第7章目录和文件操作,7.1一个简单的文件读写程序7.2目录管理7.3文件管理7.3文本文件的读写7.4二进制文件的读写,本章内容,7.1一个简单的文件读写程序,创建窗体应用程序ReadWriteFile:在窗体上添加TreeView等控件,适当调整各控件的大小和位置,设计界面如下图:,7.1一个简单的文件读写程序,在设计界面中双击【列出目录下的文本文件】和【保存当前文件】按钮,分别编写这两个按钮的Click事件处理代码;最后为控件treeView1编写AfterSelect事件的处理代码:,首先在Form1.cs文件的前面引入命名空间:usingSystem.IO;并为Form1类添加一个私有成员变量:privatestringfilename=;,7.1一个简单的文件读写程序,/【列出目录下的文本文件】按钮privatevoidbutton1_Click(objectsender,EventArgse)TreeNodenode=newTreeNode(textBox2.Text,0,0);treeView1.Nodes.Clear();treeView1.Nodes.Add(node);TreeNodetopnode=treeView1.TopNode;/获取指定目录下的所有文件stringFiles=Directory.GetFiles(textBox2.Text,*.txt);for(inti=0;iFiles.Length;i+)strings=Filesi.Substring(Filesi.LastIndexOf()+1);node=newTreeNode(s,1,2);topnode.Nodes.Add(node);topnode.Expand();,7.1一个简单的文件读写程序,/控件treeView1编写AfterSelect事件的处理代码privatevoidtreeView1_AfterSelect(objectsender,TreeViewEventArgse)filename=textBox2.Text+treeView1.SelectedNode.Text;StreamReaderreader=null;tryreader=newStreamReader(filename,System.Text.Encoding.Default);stringline=reader.ReadLine();textBox1.Text=;while(line!=null)textBox1.Text+=line+rn;line=reader.ReadLine();catch(IOExceptionex)MessageBox.Show(ex.Message);finallyif(reader!=null)reader.Close();,7.1一个简单的文件读写程序,/【保存当前文件】按钮privatevoidbutton2_Click(objectsender,EventArgse)StreamWriterwriter=null;trywriter=newStreamWriter(filename,false,System.Text.Encoding.Default);writer.WriteLine(textBox1.Text);catch(Exceptionex)MessageBox.Show(ex.Message);finallyif(writer!=null)writer.Close();,7.1一个简单的文件读写程序,运行该程序,先在左上角的文本框中输入已有的目录路径,然后点击运行界面上的【列出目录下的文本文件】按钮,在TreeView控件中将列出给定目录下的所有文本文件,选择相应的文件即在右边的文本框中打开被选定的文件。当单击【保存当前文件】按钮时,将在文本框中打开的文件保存到原文件中。,7.1一个简单的文件读写程序,Directory类、File类、StreamReader类、StreamWriter类及有关目录和文件操作的类都是放在命名空间System.IO中;因此在程序开头要使用下列语句引入该命名空间:usingSystem.IO;,7.2目录管理,7.2.1目录存在的判断对于指定的目录,可以由Directory.Exists(stringpath)方法来判断其是否存在,如果存在则返回true,否则范围false。例如:stringpath=C:Inetpub;if(Directory.Exists(path)=true)/相关处理代码Console.WriteLine(Existing);C:Inetpub也写成C:Inetpub,但不能写成C:Inetpub,7.2目录管理,7.2.2目录的创建和删除1.目录的创建目录的创建是用Directory.CreateDirectory(stringpath)方法来实现。例如:stringpath=D:VS2008第7章Filesdir1;Directory.CreateDirectory(path);,不管D:VS2008第7章Filesdir1目录是否已存在,执行上述语句时不会给出任何提示。如果该目录已经存在,执行上述语句时也不会删除其中包含的文件和子目录。,7.2目录管理,7.2.2目录的创建和删除2.目录的删除目录的删除是由Directory.Delete()方法来实现,该方法有两个重载版本:voidDirectory.Delete(stringpath)voidDirectory.Delete(stringpath,boolrecursive),用于删除空目录,如果目录非空或指定的目录不存在都会产生异常,参数recursive值为true时,表示删除指定的目录及该目录下的所有子目录,如果指定目录不存在会产生异常。,7.2目录管理,7.2.2目录的创建和删除例如,下面代码用于删除由path指定的目录,并在删除过程中给出相关的提示信息:stringpath=D:VS2008第7章Filesdir1;if(Directory.Exists(path)=true)if(MessageBox.Show(确认要删除该目录及其子目录吗?,删除目录,MessageBoxButtons.YesNo,MessageBoxIcon.Warning)=DialogResult.Yes)Directory.Delete(path,true);,7.2目录管理,7.2.3当前工作目录的获取当前应用程序(.exe文件)的当前工作目录可由Directory.GetCurrentDirectory()方法获取。例如:textBox1.Text=Directory.GetCurrentDirectory();执行后在textBox1控件中显示“D:VS2008第7章testtestbinDebug”。,7.2目录管理,7.2.4目录相关信息的获取1.获取指定目录下的所有子目录和文件获取指定目录下的所有子目录可由Directory.GetDirectories()方法来实现。例如:stringpath=D:VS2008;/获取指定目录下的所有子目录stringDirs=Directory.GetDirectories(path);for(inti=0;iDirs.Length;i+)listBox1.Items.Add(Dirsi);,7.2目录管理,7.2.4目录相关信息的获取1.获取指定目录下的所有子目录和文件获取指定目录下的所有文件可由Directory.GetFiles()方法来实现。例如:stringpath=D:VS2008;/获得D:VS2008目录下所有的txt文件stringFiles=Directory.GetFiles(path,*.txt);for(inti=0;iFiles.Length;i+)listBox1.Items.Add(Filesi);,7.2目录管理,7.2.4目录相关信息的获取3.获取指定目录所在驱动器的相关信息驱动器信息主要包括驱动器名称、总容量、剩余空间、驱动器格式等。获取方法是,先利用给定的目录创建DriveInfo类的对象,然后通过对象的属性和方法来获取。,7.2目录管理,7.2.4目录相关信息的获取例如,下列代码将获取D:VS2008第7章Filesdir1目录所在驱动器的若干信息:stringpath=D:VS2008第7章Filesdir1;DriveInfodi=newDriveInfo(path);listBox1.Items.Add(驱动器名称:+di.Name);listBox1.Items.Add(驱动器根目录:+di.RootDirectory);listBox1.Items.Add(剩余空间:+(double)di.TotalFreeSpace/1024/1024/1024+GB);listBox1.Items.Add(驱动器容量:+(double)di.TotalSize/1024/1024/1024+GB);listBox1.Items.Add(可用空间:+(double)di.AvailableFreeSpace/1024/1024/1024+GB);listBox1.Items.Add(驱动器格式:+di.DriveFormat.ToString();listBox1.Items.Add(驱动器类型:+di.DriveType);listBox1.Items.Add(驱动器卷标:+di.VolumeLabel);,7.3文件管理,7.3.1文件的拷贝、移动和删除,1.拷贝文件文件的拷贝可利用File类提供的静态方法Copy()来实现,它有两个重载版本:publicstaticvoidCopy(stringsourceFileName,stringdestFileName)publicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite)其中,sourceFileName:源文件名destFileName:目标文件名File.Copy(sourceFileName,destFileName);当overwrite的值为true时,表示要覆盖已存在的同名文件,当参数overwrite缺省时(见第一个方法),相当于取值false,即不允许覆盖。,7.3文件管理,7.3.1文件的拷贝、移动和删除,2.移动文件文件的移动可利用File类提供的静态方法Move()来实现,该方法的原型如下:publicstaticvoidMove(stringsourceFileName,stringdestFileName),例如:stringsourceFileName=D:VS2008第7章Filesdir1MyName.txt;stringdestFileName=D:VS2008第7章Filesdir2MyName.txt;File.Move(sourceFileName,destFileName);,7.3文件管理,7.3.1文件的拷贝、移动和删除,3.删除文件文件的删除可利用File类提供的静态方法Delete()来实现。例如,下面语句的作用是删除D:VS2008第7章Files目录下的文件MyName.txt:stringpath=D:VS2008第7章FilesMyName.txt;File.Delete(path);,7.3文件管理,7.3.2文件信息的获取和设置,FileInfo类通常用于获取或设置文件的有关信息和属性。方法是:先利用FileInfo类的构造函数和文件名创建文件的FileInfo类对象,然后通过对象的方法来实现有关信息和属性的获取和设置。,例如,下列代码显示了如何获取文件所在的目录等信息:stringpath=D:VS2008第7章FilesMyName.txt;FileInfofi=newFileInfo(path);stringinfo;info=文件所在的目录:+fi.DirectoryName;/返回类型是stringlistBox1.Items.Add(info);info=文件所在的目录:+fi.Directory.ToString();/返回类型是DirectorylistBox1.Items.Add(info);info=文件的绝对路径:+fi.FullName;listBox1.Items.Add(info);,7.3文件管理,7.3.2文件信息的获取和设置,info=文件名:+fi.Name;listBox1.Items.Add(info);info=创建时间:+fi.CreationTime.ToString();listBox1.Items.Add(info);info=文件的扩展名:+fi.Extension;listBox1.Items.Add(info);info=文件的最近访问时间:+fi.LastAccessTime;listBox1.Items.Add(info);info=最近写文件的时间:+fi.LastWriteTime;listBox1.Items.Add(info);info=文件的实际长度(包含的字节数):+fi.Length.ToString();listBox1.Items.Add(info);info=是否只读:+fi.IsReadOnly.ToString();listBox1.Items.Add(info);/fi.IsReadOnly=true;/可以设置这个属性,使得文件变为只读,7.4文本文件的读写,7.4.1读文本文件,StreamReader类提供构造函数来对指定的文件创建文件的输入流。StreamReader类定义了10个版本的重载构造函数,其中常有的有两种:publicStreamReader(stringpath)publicStreamReader(path,System.Text.Encodingencoding)其中,参数path为文件路径,encoding用于设置编码方式,如果文件中包含中文,该参数一般设置为System.Text.Encoding.Default。,7.4文本文件的读写,7.4.1读文本文件,StreamReader类的常用方法主要包括:BaseStream.Seek()方法该方法用于指定在输入流中读取字符的位置,其原型如下:longBaseStream.Seek(longoffset,SeekOriginorigin)其中,origin:用于设置在输入流中读取字符的初始位置,其可能取值包括SeekOrigin.Begin、SeekOrigin.Current和SeekOrigin.End,分别表示初始位置为输入流的开始处、当前位置和流的末尾;offset:相对于origin参数的字节偏移量,初始位置offset就是在输入流中读取字符的真正位置。,StreamReaderreader=newStreamReader(D:testtxt);reader.BaseStream.Seek(10,SeekOrigin.Begin);,从文件D:testtxt中的第10字符开始读入文本,7.4文本文件的读写,7.4.1读文本文件,Read()方法该方法用于读取输入流中的下一个字符,同时使输入流的当前位置加1。该函数返回的是字符的ASCII码的int型整数,因此需要作一定的转换。,例如:stringpath=D:test.txt;StreamReaderreader;reader=newStreamReader(path,System.Text.Encoding.Default);intascii=reader.Read();/获得字符的ASCII码charch=(char)ascii;/转换为字符while(ascii!=-1)if(ascii!=10)richTextBox1.Text+=ch.ToString();ascii=reader.Read();ch=(char)ascii;reader.Close();,7.4文本文件的读写,7.4.1读文本文件,ReadLine()方法该方法用于从输入流中读取一行字符,并将结果以字符串返回。,例如:stringpath=D:VS2008第7章Files毛主席诗词2.txt;StreamReaderreader=newStreamReader(path,System.Text.Encoding.Default);reader.BaseStream.Seek(10,SeekOrigin.Begin);stringline=reader.ReadLine();while(line!=null)richTextBox1.Text+=line+n;line=reader.ReadLine();reader.Close();,从文本文件“毛主席诗词2.txt”中的第10字符开始,逐行读取文本,并将结果显示在richTextBox1控件中,7.4文本文件的读写,7.4.2写文本文件,StreamWriter类也提供构造方法来对指定的文件创建输出流。StreamWriter类定义了7个版本的重载构造函数,其中常有的有三种:publicStreamWriter(stringpath)publicStreamWriter(stringpath,boolappend)publicStreamWriter(stringpath,boolappend,System.Text.Encodingencoding)其中,参数path和encoding同StreamReader类的构造函数,参数append的值如果设置为true,表示追加写入,为false表示覆盖写入。,例如:stringpath=D:test2.txt;StreamWriterwriter=newStreamWriter(path,true,System.Text.Encoding.Default);,以追加方式创建基于文件D:test2.txt的输出流,7.4文本文件的读写,7.4.2写文本文件,StreamWriter类提供的常用方法包括:Write()方法该方法用于向输出流写入字符串、字符、字符数组、实数和整数等。它一共有17个重载版本,其中常用的包括:publicoverridevoidWrite(stringvalue)publicoverridevoidWrite(charvalue)publicoverridevoidWrite(charbuffer)publicoverridevoidWrite(doublevalue)publicoverridevoidWrite(floatvalue)publicoverridevoidWrite(decimalvalue)publicoverridevoidWrite(intvalue)publicoverridevoidWrite(longvalue),例如:stringpath=D:test3.txt;StreamWriterwriter=newStreamWriter(path,false,System.Text.Encoding.Default);writer.Write(aaaaaaa);writer.Write(BBBBB);/这两个语句相当于回车换行的作用writer.Write(r);writer.Write(n);writer.Write(ccccc);writer.Close();,Write()方法执行完后,不会自动添加回车换行符。如果需要,必须显式添加。,7.4文本文件的读写,7.4.2写文本文件,WriteLine()方法该方法与Write()方法的功能和用法基本相同,也是用于将字符串、字符、字符数组、实数和整数等写入输出流中。主要不同之处在于,WriteLine()方法执行后会自动添加一个回车换行符“rn”,而Write()方法没有。,7.5二进制文件的读写,二进制文件的读、写操作分别由BinaryReader类和BinaryWriter类来实现。这两个类一般都要与FileStream类结合使用,即由FileStream类创建文件流,然后利用BinaryReader类和BinaryWriter类实现对文件流的读写操作,从而实现对文件的读写操作。FileStream类提供一共15个重载构造函数,常用的由两种:publicFileStream(stringpath,FileModemode)publicFileStream(stringpath,FileModemode,FileAccessaccess)其中,path:用于设置文件路径;access:用于对文件的访问方式,可能取值包括FileMode.Read、FileMode.Write、FileMode.ReadWrite,分别表示只读、只写、可读写;mode:其可能取值及其意义如下:,7.5二进制文件的读写,FileMode.Append:表示以追加方式打开文件(打开后文件位置移动到文件的末尾),FileMode.Append仅可以与FileAccess.Write联合使用。FileMode.Create:创建新的文件,如果已存在同名的文件,则覆盖它。FileMode.CreateNew:创建新的文件,但如果已经存在同名的文件,则抛出异常。FileMode.Open:打开已有的文件,但如果不存在所指定的文件,则抛出异常。FileMode.OpenOrCreate:如果文件已存在,则打开它,否则创建新的文件。FileMode.Truncate:打开已有的文件,当写入数据时将覆盖文件中原有的数据,但文件的基本属性保持不变(如初始创建日期等)。如果指定的文件不存在则抛出异常。,7.5二进制文件的读写,BinaryWriter类提供了两个本版的构造函数:publicBinaryWriter(Streamoutput,)publicBinaryWriter(Streamoutput,Encodingencoding)其中,参数output用于设置流对象,通常是由FileStream类实例化的对象。,7.5.1写二进制文件,7.5二进制文件的读写,BinaryWriter类常用的方法主要是:Write()方法该方法一共重载了18个版本,其中大部分与StreamWriter类的Write()方法相同。,7.5.1写二进制文件,7.5二进制文件的读写,例如:stringpath=C:test.dat;FileStreamfs=newFileStream(path,FileMode.OpenOrCreate,FileAccess.Write);BinaryWriterwriter=newBinaryWriter(fs);writer.BaseStream.Seek(0,SeekOrigin.Begin);/设置当前位置writer.Write(中华人民共和国);/写入数据writer.Close();fs.Close();,7.5.1写二进制文件,写二进制文件的关键代码,7.5二进制文件的读写,类BinaryReader提供许多用于读取输入流中的数据,主要包括:publicabstractintRead(bytebuffer,intindex,intcount)publicabstractbyteReadByte()publicabstractbyteReadBytes()publicabstractcharReadChar()publicabstractcharReadChars()publicabstractdecimalReadDecimal()publicabstractdoubleReadDouble()publicabstractshortReadInt16()publicabstractintRea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年深海矿产资源勘探技术深海矿产资源勘探技术装备研发与培训与考核报告
- 2025年航空货运市场格局分析与发展战略研究报告
- 篮球场合同合作合同范本
- 粪肥运输合同协议书模板
- 电池置换合同协议书模板
- 门窗厂投资入股合同范本
- 生产经营权转让合同范本
- 精装房装修出租合同范本
- 高标农田服务协议书模板
- 江苏叉烧酱采购合同范本
- GB 11930-1989操作开放型放射性物质的辐射防护规定
- 环网柜基础知识课程课件
- 中小学班主任工作手册(修订)
- 育婴员中级近年考试真题汇总(含答案)
- 北师大版三年级数学下册《第6单元认识分数课时1》课堂教学课件PPT小学公开课
- 99S203 消防水泵接合器安装图集
- “问题链”教学相关的国内外研究现状与发展趋势
- 纸箱厂表格——生产作业单
- 预防医学试题库及答案,超全面的
- 防雷接地施工方案1
- 水利水电工程项目法人验收工作计划总结总结
评论
0/150
提交评论