C#语言程序设计 5章_ppt.txt

大学C语言程序设计-李继武 彭德林-课件PPT

收藏

资源目录
跳过导航链接。
压缩包内文档预览:
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836185    类型:共享资源    大小:6.11MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学C语言程序设计-李继武 彭德林-课件PPT 大学 语言程序设计 李继武 彭德林 课件 ppt
资源描述:
大学C语言程序设计-李继武 彭德林-课件PPT,大学C语言程序设计-李继武,彭德林-课件PPT,大学,语言程序设计,李继武,彭德林,课件,ppt
内容简介:
第5章 文件I/O操作管理和读写文件信息的功能将使得应用程序的用途更多,利用C#语言编程能很容易实现这些操作。本章详细介绍了C#语言为我们提供的多个可以用于文件I/O操作的类及其使用方法。另外,流也是本章需要理解的一个重要概念,通过它对文件读写更加灵活方便。5.1 用于文件操作的类在计算机中,我们通过文件的形式把各种数据、文档、程序等软件资源永久性存储在各种媒质上(可移动磁盘、硬盘、CD等),并可以对它们进行读取、修改、复制、移动和删除等操作。文件是一种进行数据读写操作的有效方法,为了更方便地使用文件,操作系统中采用目录树的方法对文件进行管理,一个目录可以包含若干个文件和子目录,由此构成了一个由文件和目录组成的庞大的树状存储系统。在Windows系统中,我们习惯上把目录称为文件夹。我们在编写一个较完整的应用程序时,肯定要涉及到对系统和用户的信息进行存储、读取、修改等操作,还常常需要设计自己的文件格式。因此,有效地实现文件操作,是一个良好的应用程序所必须具备的内容。C#语言为我们提供了多个可以用于文件操作的类,如图5-1所示,利用它们,可以很容易地实现对文件的存储管理、对文件的读写等各种操作。下面,我们给出几个可以常用于文件操作的类。C#语言为我们提供了多个可以用于文件操作的类,利用它们,可以很容易地实现对文件的存储管理、对文件的读写等各种操作。下面,我们给出几个可以常用于文件操作的类。Directory 类:提供多个对目录和子目录进行创建、移动和枚举的静态方法。DirectoryInfo 类:提供多个对目录和子目录进行创建、移动和枚举的实例方法。File 类:提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream类对象。FileInfo类:提供用于创建、复制、删除、移动和打开文件的实例方法,并协助创建FileStream类对象。FileStream类:支持通过其 Seek 方法随机访问文件。默认情况下,FileStream 以同步方式打开文件,但它也支持异步操作。FileSystemInfo类:是 FileInfo类 和 DirectoryInfo类 的抽象基类。Path类:提供以跨平台的方式处理目录字符串的方法和属性。如果在程序中使用这些类,需要引入这些类所在的名称空间,即在程序源文件的最前面加入语句 using System.IO; ,否者,系统将无法识别这些类。5.2 目录和路径操作5.2.1 Directory类 Directory 类既可以用来复制、移动、重命名、创建和删除目录,也可用来获取和设置与目录的创建、访问及写入操作相关的时间信息。Directory类是无状态的,它的成员函数全部都是静态的,每次执行前都要进行安全检查。Directory 类主要成员函数如表5-1所示:表5-1 Directory 类的主要成员函数案例:练习使用Directory 类目标:掌握Directory 类及其部分主要方法的使用技巧步骤:1、启动VS.NET,新建一个控制台应用程序,名称填写为“DirectoryTest”,位置设置为“c:CSharpSampleschp5”。2、在代码设计窗口中编辑Class1.cs。其中的代码编写如下: using System; using System.IO; namespace DirectoryTest class DirectoryTest public static void Main() / 指定您想要操作的目录string source = c:SourceDir;string target = c:TargetDir;try / 判断目录是否存在if (!Directory.Exists(source) / 如果源目录不存在则创建它Directory.CreateDirectory(source);if (Directory.Exists(target) / 如果目标目录存在则删除它Directory.Delete(target, true);/ 移动目录,就是把源目录移动到目标目录,更直接地说,就是把由source指定的源目录内所有文件和子目录都移动到由target指定的目标目录中去,同时删除了源目录。 Directory.Move(source, target);/返回目标目录被创建、最后被访问、最后被修改的时间 Console.WriteLine(目录 0 被移动到目录 1 。,source,target);Console.WriteLine(目录 0 被创建的时间是 :1,target,Directory.GetCreationTime(target);Console.WriteLine(目录 0 最后被访问的时间是 :1,target,Directory.GetLastAccessTime(target);Console.WriteLine(目录 0 最后被修改的时间是 :1,target,Directory.GetLastWriteTime(target); catch (Exception e) Console.WriteLine(操作失败: 0, e.ToString(); finally 3、按Ctrl + F5编译并运行该程序,效果如图5-2所示。 程序运行结束后,源目录c:SourceDir中内容将被移动到目标目录c:TargetDir中,请注意观察程序运行前后系统磁盘目录的变化情况。5.2.2 DirectoryInfo类 DirectoryInfo类与Directory类具有相同的功能和用途,它们的成员函数也大致相同。但DirectoryInfo类是有状态的,它的成员函数都不是静态的,使用时必需先实例化成一个对象,然后通过对象进行调用。如果使用同一个对象执行多个操作时,使用DirectoryInfo就比较有效,因为对该对象所关联文件的安全检查仅在对象被构造时执行一次,其后无论该对象调用了多少方法,都不需要再进行安全检查了。DirectoryInfo 类主要属性和成员函数如表5-2所示:表5-2 DirectoryInfo 类的主要属性和成员函数案例:练习使用DirectoryInfo 类目标:掌握使用DirectoryInfo 类进行目录管理的使用技巧步骤: 1、启动VS.NET,新建一个控制台应用程序,名称填写为“DirectoryInfoTest”,位置设置为“c:CSharpSampleschp5”。2、在代码设计窗口中编辑Class1.cs。其中的代码编写如下:using System;using System.IO;namespace DirectoryInfoTestclass DirectoryInfoTestpublic static void Main()/实例化DirectoryInfo类对象d,并把它和目录c:temp关联起来DirectoryInfo d = new DirectoryInfo(c:temp);/判断目录是否存在if (!d.Exists)/如果目录不存在则创建它d.Create();Console.WriteLine(创建了目录: 0,d.FullName);/声明两个DirectoryInfo类对象d1和d2DirectoryInfo d1;DirectoryInfo d2;try/利用d创建子目录,并把d1和新创建的目录c:temp子目录1关联起来d1 = d.CreateSubdirectory(子目录1);Console.WriteLine(创建了目录: 0,d1.FullName);catch(IOException e)/创建失败,给出提示信息,结束程序Console.WriteLine(子目录1创建失败!);return;try/利用d1创建子目录,并把d2和新创建的目录c:temp子目录1子目录2关联起来d2 = d1.CreateSubdirectory(子目录2);Console.WriteLine(创建了目录: 0,d2.FullName);catch(IOException e)Console.WriteLine(子目录2创建失败!);return; try/利用d创建子目录,并把d2和新创建的目录c:temp子目录1子目录3关联起来d2 = d.CreateSubdirectory(子目录1子目录3);Console.WriteLine(创建了目录: 0,d2.FullName);catch(IOException e)Console.WriteLine(子目录3创建失败!);return; /DirectoryInfo类对象数组,用于存储某目录下的所有子目录DirectoryInfo subdir;try/返回指定目录c:temp中的所有子目录,并把它们存放在subdir数组中subdir = d.GetDirectories();catch(DirectoryNotFoundException e)Console.WriteLine(目录不存在错误);return;/依次处理c:temp目录中的所有子目录foreach(DirectoryInfo dir in subdir)/删除目录,参数为true时,表示无条件直接删除该目录及其中包含的所有子目录和文件dir.Delete(true);Console.WriteLine(删除了目录: 0 (包含其中所有文件和子目录),dir.FullName);/删除目录,参数为false时,如果目录非空,会产生运行期错误d.Delete(false);Console.WriteLine(“删除了目录: 0”,d.FullName);3、按Ctrl + F5编译并运行该程序,效果如图5-3所示。 5.2.3 Path类 Path类用于以跨平台的方式处理目录字符串,它包含一些静态的属性和方法,可以很容易地对路径名执行操作。使用Path类要比手工处理各个符号容易得多,因为Path类在处理不同操作系统上的路径名时,会使用不同的格式。最简单的情况,Path类处理Unix路径时,是以/(并不是)用作路径名中的分隔符,而处理Windows 和 Macintosh 路径时,是以 (并不是/)用作路径名中的分隔符的。Path 类成员函数如表5-3所示:表5-3 Path 类的主要成员函数列表案例:练习使用Path 类目标:掌握使用Path 类处理目录字符串的使用技巧步骤:1、启动VS.NET,新建一个控制台应用程序,名称填写为“PathTest”,位置设置为“c:CSharpSampleschp5”。2、在代码设计窗口中编辑Class1.cs。其中的代码编写如下: using System; using System.IO; namespace PathTest class PathTest public static void Main() /需要处理的目录字符串path1、path2、path3和path4string path1 = c:tempMyTest.txt;string path2 = c:temp;string path3 = MyTest;/判断是否具有扩展名if (Path.HasExtension(path1) Console.WriteLine(路径 0 中含有文件扩展名。n, path1);/分别返回该路经中包含的文件名、文件扩展名、文件全名和目录名Console.WriteLine( 其文件名是:0, Path.GetFileNameWithoutExtension(path1);Console.WriteLine( 其文件扩展名是:0, Path.GetExtension(path1);Console.WriteLine( 其文件全名是:0, Path.GetFileName(path1);Console.WriteLine( 其目录名是:0, Path.GetDirectoryName(path1);/更改文件的扩展名为.docstring result=Path.ChangeExtension(path1,.doc);Console.WriteLine( 更改后的文件扩展名是:0,Path.GetExtension(result);/合并两个路径字符串。当第二个路径中不含扩展名时,第二个路径被当作子目录处理。Console.WriteLine(n路径0和路径1合并后,新的路径为2。,path2,path3,Path.Combine(path2,path3);/合并两个路径字符串。当第二个路径中含有扩展名时,第二个路径被当作文件处理。Console.WriteLine(路径0和路径1合并后,新的路径为2。, path2,path4,Path.Combine(path2,path4);3、按Ctrl + F5编译并运行该程序 5.3 创建文件 对文件进行读写,首先要创建文件,下面介绍几个与文件密切相关的类。 5.3.1 File类 File 类既可以用来创建、复制、删除、移动和打开文件,也可用来获取和设置文件属性或有关文件创建、访问及写入操作的时间信息。File类是无状态的,它的成员函数全部都是静态的,每次执行前都要进行安全检查。 案例:练习使用File 类目标:掌握File 类及其主要成员函数的使用技巧步骤:1、启动VS.NET,新建一个控制台应用程序,名称填写为“FileTest”,位置设置为“c:CSharpSampleschp5”。2、在代码设计窗口中编辑Class1.cs。其中的代码编写如下:using System;using System.IO;namespace FileTestpublic class FileTest public static void Main() string path = c:tempMyTest.txt;/判断目录是否存在if (!Directory.Exists(Path.GetDirectoryName(path) / 如果目录不存在则创建它Directory.CreateDirectory(Path.GetDirectoryName(path);/判断文件是否存在if (File.Exists(path) /如果文件存在则删除它File.Delete(path);/创建文件File.Create(path);Console.WriteLine(*读取文件属性*);/读取文件的各种属性Console.WriteLine(文件名: 0,path);Console.WriteLine(文件被创建时间: 0, File.GetCreationTime(path);Console.WriteLine(文件最后一次被访问时间: 0, File.GetLastAccessTime(path);Console.WriteLine(文件最后一次被修改时间: 0, File.GetLastWriteTime(path);Console.WriteLine(n*设置文件属性*);/把文件设置为隐藏文件File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);Console.WriteLine(文件 0 被设置为隐藏文件。, path); 3、按Ctrl + F5编译并运行该程序 5.3.2 FileInfo类 FileInfo类与File类具有相同的功能和用途,它们的成员函数也大致相同。但FileInfo类是有状态的,它的成员函数都不是静态的,使用时必需先实例化成一个对象,然后通过对象进行调用。如果使用同一个对象执行多个操作时,使用FileInfo就比较有效,因为对该对象所关联文件的安全检查仅在对象被构造时执行一次,其后无论该对象调用了多少方法,都不需要再进行安全检查了。 案例:文件的复制目标:掌握使用FileInfo 类进行文件操作的使用技巧步骤:1、启动VS.NET,新建一个控制台应用程序,名称填写为“FileInfoTest”,位置设置为“c:CSharpSampleschp5”。2、在代码设计窗口中编辑Class1.cs。其中的代码编写如下:using System;using System.IO;namespace FileInfoTestpublic class CopyFile public static void Main(String args) /要被复制的源文件名string sourcefilename;/被复制到的目标文件名string targetfilename;/判断输入的命令格式是否正确if (args.Length2)Console.WriteLine(命令的正确格式是: 命令名 源文件名 目标文件名 。);return;else sourcefilename = args0;targetfilename = args1;try/创建FileInfo类的对象fi,用来和源文件相关联FileInfo fi = new FileInfo(sourcefilename);/进行文件的复制,如果第二个参数为false时,目标文件如果存在则会产生运行期错误,如果第二个参数为true时,目标文件如果存在则覆盖,不会产生错误。fi.CopyTo(targetfilename,false);catch(System.IO.FileNotFoundException)Console.WriteLine(源文件 0 不存在,sourcefilename);return;catch(System.IO.IOException)Console.WriteLine(目标文件 0 已经存在,targetfilename); return;catch(Exception)Console.WriteLine(文件复制失败!);return;Console.WriteLine(文件复制成功! ); 3、按Ctrl + F5编译并运行该程序,效果如图5-6所示。这个程序用来完成文件的复制,正确的使用格式是:“命令名 源文件名 目标文件名”,比如当输入为“CopyFile c:s.txt d:d.doc”,则该程序会把源文件c:s.txt复制到目标文件d:d.doc中去。 5.3.3 FileStream类 FileStream 类用来对文件系统上的文件进行读取、写入、打开和关闭等操作。由于FileStream 类能够对输入输出进行缓冲,因而处理性能比较高。FileStream类的成员函数都是非静态的,需要通过FileStream类的实例对象对文件中的数据进行读写。要构造FileStream实例,一般需要四条信息:1要访问的文件。2表示如何打开文件的模式。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有文件,写入操作是应改写文件原来的内容,还是添加到文件的末尾?3表示如何访问文件的访问方式。是只读、只写,还是读写?4共享访问。是独占访问文件,还是允许其它流同时访问文件?如果允许其它流同时访问文件,则这些流是只读、只写,还是读写文件? 第一条信息通常用一个包含文件完整路径名的字符串来表示。其余三条信息分别由三个枚举常量FileMode、FileAccess和FileShare来表示 注意,对于FileMode,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。如果文件不存在,Append、Open和Truncate会抛出一个异常;如果文件存在,CreateNew会抛出一个异常;Create和OpenOrCreate可以处理这两种情况,但Create会删除现有的文件,创建一个新的空文件。FileStream有许多构造函数,其中三个最简单的构造函数如下所示:FileStream fs1=new FileStream (c:tempMyTest.txt,FileMode.Create);FileStream fs2=new FileStream(c:tempMyTest.txt , FileMode.Create, FileAccess.Write);FileStream fs3=new FileStream(c:tempMyTest.txt , 从上面的代码可以看出,构造函数有很多个重载方法,其中FileAccess.ReadWrite和FileShare.Read的是构造函数第三和第四个参数的默认缺省值。此外,也可以从FileInfo实例中创建一个文件流。FileInfo fi4 = new FileInfo(c:tempMyTest.txt );FileStream fs4 = fi4.OpenRead();FileInfo fi5 = new FileInfo(c:tempMyTest.txt );FileStream fs5 = fi5.OpenWrite(); FileInfo fi6 = new FileInfo(c:tempMyTest.txt );FileStream fs6 = fi6.Create(); FileInfo fi7 = new FileInfo(c:tempMyTest.txt );FileStream fs7 = fi7.Open(FileMode.Append, FileAccess.Read, FileShare.None); FileInfo.OpenRead()提供的流只能读取现有的文件,而FileInfo.OpenWrite()可以进行读写访问。FileInfo.Open()允许显式指定模式、访问方式和文件共享参数。5.3.4 创建文件的几种方法上面介绍的三个有关文件的类File、FileInfo和FileStream都可以用来创建文件,大致总结一下,创建文件的方法主要有以下几种:1使用File类创建文件: string path = c:tempMyTest.txt;/ 使用成员函数CreateText创建一个新的文本文件进行读写,其参数是一个表示新建文件路径的字符串,返回值是一个StreamWriter类的对象。StreamWriter类主要用于文本文件的写入,详细使用方法参见5.4.2 使用StreamReader和StreamWriter类读写文本文件。StreamWriter sw1 = File.CreateText(path);/ 向path指定的文件追加文本。如果文件存在,则在文件尾部追加内容,否则,创建该文件。StreamWriter sw2 = File.AppendText(path);/ 创建一个新的文件进行读写,FileStream 类主要用于文件的读写,详细使用方法参见使用5.4.1 FileStream类读写文件。FileStream fs = File.Create(path); 使用FileInfo类创建文件:/ 实例化FileInfo类的对象fiFileInfo fi = new FileInfo(c:tempMyTest.txt);/ 创建一个新的文本文件进行读写。StreamWriter sw1 = fi.CreateText() ;/ 向实例对象fi表示的文件追加文本。如果文件存在,则在文件尾部追加内容,否则,创建该文件。StreamWriter sw2 = fi.CreateText();/ 创建一个新的文件进行读写。FileStream fs = fi.Create();使用FileStream类创建文件:利用FileStream类的构造函数,在实例化对象的同时,可以完成文件的创建。 FileStream fs1=new FileStream (c:tempMyTest.txt,FileMode.Create);FileStream fs2=new FileStream(c:tempMyTest.txt , FileMode.Create, FileAccess.Write);FileStream fs3=new FileStream(c:tempMyTest.txt , FileMode.Create, FileAccess.Read, FileShare.None);5.4 读写文件 读写文件是对文件最常用的操作。读写文件时,通常要通过流(Stream)来完成。流指的是信息流,一个流是字节的源或目的,流是有次序的。例如,一个需要键盘输入的程序可以用流来完成信息的输入。 有两种基本的流:输入流和输出流。你可以从输入流读,但你不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源,比如文件、内存或键盘等。同理,你可以向输出流写,但你不能对它读。要向输出流写入字节,必须有一个与这个流相关联的字符源,比如文件、内存或显示器等。由此可见,流可以用于向文件发送信息和接收来自文件的信息。读写文件时,需要按一定的步骤进行。首先需要打开文件。如果是创建新文件,则在创建该文件的同时,应该打开它。文件打开后,需要使用流来将信息加入到文件中或从文件中取出信息。创建流时,需要指明信息的流动方向。将流与文件关联起来后,便可以开始读写数据了。如果是读取文件中的信息,则可能需要检查是否到了文件的末尾。读写完信息后,需要关闭文件。读取文件的基本步骤如下: 打开或创建文件; 建立从文件中取出信息或向文件写入信息的流; 将信息加入到文件中或从文件中读取信息; 关闭流和文件。5.4.1 使用FileStream类读写文件 FileStream类在前面的章节中已经进行了介绍,并详细介绍了它的各种构造函数。从类的名字可以看出,FileStream类本身就是一个用来进行文件读写的流。FileStream类中提供了许多可以进行文件读写的实例方法。ReadByte()是读取数据的最简单的方式,它从流中读取一个字节,并把这个字节转换为一个0到255之间的整数。如果到达该流的末尾,就返回 1 。int nextByte = fs.ReadByte(); / fs为FileStream类的一个实例对象如果想要一次读取多个字节,可以调用Read()方法,它可以把特定数量的字节读入到一个数组中。Read()方法返回实际读取的字节数。如果返回值是0,就表示已经到达了流的尾端。/ 一次读入100个字节int nBytes = 100;byte nBytesRead nBytes;int nBytesRead = fs.Read(nBytesRead, 0,nBytes);Read()的第一个参数是一个byte类型的数组;第二个参数是一个偏移值,使用它可以要求Read读取的数据从数组的某个元素开始,而不是从第一个元素开始;第三个参数是最多读取的字节数。 如果要给文件写入数据,可以使用方法WriteByte()和Write()。WriteByte()方法把一个字节写入流:byte nextByte = 100;fs. WriteByte(nextByte);如果想要一次写入多个字节,可以调用Write()方法,它可以把一个数组中特定数量的字节写入流。/一次写入100个字节int nBytes=100;byte ByteArray = new bytenBytes;for (int i = 0 ; i 100 ; i+)
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学C语言程序设计-李继武 彭德林-课件PPT
链接地址:https://www.renrendoc.com/p-21836185.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!