资源描述
,C#,程序设计教程,蒙祖强编著,第,7,章,目录和文件操作,7.1,一个简单的文件读写程序,7.2,目录管理,7.3,文件管理,7.3,文本文件的读写,7.4,二进制文件的读写,本 章 内 容,7.1,一个简单的文件读写程序,创建窗体应用程序,ReadWriteFile,:在窗体上添加,TreeView,等控件,适当调整各控件的大小和位置,设计界面如下图:,7.1,一个简单的文件读写程序,在设计界面中双击,【,列出目录下的文本文件,】,和,【,保存当前文件,】,按钮,分别编写这两个按钮的,Click,事件处理代码;最后为控件,treeView1,编写,AfterSelect,事件的处理代码:,首先在,Form1.cs,文件的前面引入命名空间:,using System.IO;,并为,Form1,类添加一个私有成员变量:,private string filename=;,7.1,一个简单的文件读写程序,/【,列出目录下的文本文件,】,按钮,private void button1_Click(object sender,EventArgs e),TreeNode node=new TreeNode(textBox2.Text,0,0);,treeView1.Nodes.Clear();,treeView1.Nodes.Add(node);,TreeNode topnode=treeView1.TopNode;,/,获取指定目录下的所有文件,string Files=Directory.GetFiles(textBox2.Text,*.txt);,for(int i=0;i Files.Length;i+),string s=Filesi.Substring(Filesi.LastIndexOf()+1);,node=new TreeNode(s,1,2);,topnode.Nodes.Add(node);,topnode.Expand();,7.1,一个简单的文件读写程序,/,控件,treeView1,编写,AfterSelect,事件的处理代码,private void treeView1_AfterSelect(object sender,TreeViewEventArgs e),filename=textBox2.Text+treeView1.SelectedNode.Text;,StreamReader reader=null;,try,reader=new StreamReader(filename,System.Text.Encoding.Default);,string line=reader.ReadLine();,textBox1.Text=;,while(line!=null),textBox1.Text+=line+rn;,line=reader.ReadLine();,catch(IOException ex),MessageBox.Show(ex.Message);,finally,if(reader!=null)reader.Close();,7.1,一个简单的文件读写程序,/【,保存当前文件,】,按钮,private void button2_Click(object sender,EventArgs e),StreamWriter writer=null;,try,writer=new StreamWriter(filename,false,System.Text.Encoding.Default);,writer.WriteLine(textBox1.Text);,catch(Exception ex),MessageBox.Show(ex.Message);,finally,if(writer!=null)writer.Close();,7.1,一个简单的文件读写程序,运行该程序,先在左上角的文本框中输入已有的目录路径,然后点击运行界面上的,【,列出目录下的文本文件,】,按钮,在,TreeView,控件中将列出给定目录下的所有文本文件,选择相应的文件即在右边的文本框中打开被选定的文件。当单击,【,保存当前文件,】,按钮时,将在文本框中打开的文件保存到原文件中。,7.1,一个简单的文件读写程序,Directory,类、,File,类、,StreamReader,类、,StreamWriter,类及有关目录和文件操作的类都是放在命名空间,System.IO,中,;,因此在程序开头要使用下列语句引入该命名空间:,using System.IO;,7.2,目录管理,7.2.1,目录存在的判断,对于指定的目录,可以由,Directory.Exist,s(string path),方法来判断其是否存在,如果存在则返回,true,,否则范围,false,。,例如:,string path=C:Inetpub;,if(Directory.Exists(path)=true),/,相关处理代码,Console.WriteLine(Existing);,C:Inetpub,也写成,C:Inetpub,,但不能写成,C:Inetpub,7.2,目录管理,7.2.2,目录的创建和删除,1.,目录的创建,目录的创建是用,Directory.CreateDirectory(string path),方法来实现。,例如:,string path=D:VS2008,第,7,章,Filesdir1;,Directory.CreateDirectory(path);,不管,D:VS2008,第,7,章,Filesdir1,目录是否已存在,执行上述语句时不会给出任何提示。,如果该目录已经存在,执行上述语句时也不会删除其中包含的文件和子目录。,7.2,目录管理,7.2.2,目录的创建和删除,2.,目录的删除,目录的删除是由,Directory.Delete(),方法来实现,该方法有两个重载版本:,void Directory.Delete(string path),void Directory.Delete(string path,bool recursive),用于删除空目录,如果目录非空或指定的目录不存在都会产生异常,参数,recursive,值为,true,时,表示删除指定的目录及该目录下的所有子目录,如果指定目录不存在会产生异常。,7.2,目录管理,7.2.2,目录的创建和删除,例如,下面代码用于删除由,path,指定的目录,并在删除过程中给出相关的提示信息:,string path=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(),方法来实现。,例如:,string path=D:VS2008;,/,获取指定目录下的所有子目录,string Dirs=Directory.GetDirectories(path);,for(int i=0;i Dirs.Length;i+),listBox1.Items.Add(Dirsi);,7.2,目录管理,7.2.4,目录相关信息的获取,1.,获取指定目录下的所有子目录和文件,获取指定目录下的所有文件可由,Directory.GetFiles(),方法来实现。,例如:,string path=D:VS2008;,/,获得,D:VS2008,目录下所有的,txt,文件,string Files=Directory.GetFiles(path,*.txt);,for(int i=0;i Files.Length;i+),listBox1.Items.Add(Filesi);,7.2,目录管理,7.2.4,目录相关信息的获取,3.,获取指定目录所在驱动器的相关信息,驱动器信息主要包括驱动器名称、总容量、剩余空间、驱动器格式等。,获取方法是,先利用给定的目录创建,DriveInfo,类,的对象,然后通过对象的属性和方法来获取。,7.2,目录管理,7.2.4,目录相关信息的获取,例如,下列代码将获取,D:VS2008,第,7,章,Filesdir1,目录所在驱动器的若干信息:,string path=D:VS2008,第,7,章,Filesdir1;,DriveInfo di=new DriveInfo(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(),来,实现,它有两个重载版本:,public static void Copy(string sourceFileName,string destFileName),public static void Copy(string sourceFileName,string destFileName,bool overwrite),其中,,sourceFileName,:源文件名,destFileName,:目标文件名,File.Copy(sourceFileName,destFileName);,当,overwrite,的值为,true,时,表示要覆盖已存在的同名文件,当参数,overwrite,缺省时(见第一个方法),相当于取值,false,,即不允许覆盖。,7.3,文件管理,7.3.1,文件的拷贝、移动和删除,2.,移动文件,文件的移动可利用,File,类提供的静态方法,Move(),来实现,该方法的原型如下:,public static void Move(string sourceFileName,string destFileName),例如:,string sourceFileName=D:VS2008,第,7,章,Filesdir1MyName.txt;,string destFileName=D:VS2008,第,7,章,Filesdir2MyNam
展开阅读全文