CH12-操作文件
CH12-操作文件
本章目标
- 掌握文本文件的读写
- 会进行文件和文件夹操作
本章内容
1、文件流
关于文件概述:
IO操作:文件/文件夹操作与读写。
文件夹:用来管理计算机文件的,每一个文件夹对应一块磁盘空间。它提供了指向对应空间的地址,它没有扩展名,也就不像文件的格式用扩展名来标识。
文件:一个具有符号的一组相关联元素的有序序列。文件可以包含范围非常广泛的内容。系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件,它具有永久存储。
流:是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。
Stream 支持读取和写入字节。所有表示流的类都继承自Stream类。
流涉及三个基本操作:
(1)读取– 将数据从流传输到数据结构(如字节数组)中。
(2)写入– 将数据从数据源传输到流。
(3)查找– 对流中的当前位置进行查询和修改。
引入System.IO命名空间—提供文件操作的类
System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。
下表列出了一些 System.IO 命名空间中常用的非抽象类:
文件流(FileStream类)
作用:用于读写文件
实现文件读写功能步骤:
语法:
1
2FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);例如:
1
FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
参数详细讲解:
创建写入器和读取器
文本文件写入器:StreamWriter
- 方法说明:
- Write():写入方法
- WriteLine():写入方法,加一换行符
1
2
3
4StreamWriter mySw = new StreamWriter(文件流对象);
mySw.Write(content);
mySw.WriteLine(content);- 方法说明:
文本文件读取器:StreamReader
- 方法说明:
- ReadToEnd():读取到文件末尾
- ReadLine():读取一行
1
2
3
4StreamReader mySr = new StreamReader(文件流对象);
content = mySr.ReadToEnd();
content = mySr.ReadLine();- 方法说明:
案例:
写入文件:
1
2
3
4
5
6
7
8
9
10//1. 创建文件流对象
FileStream fs = new FileStream("test.txt",FileMode.CreateNew);
//2. 创建写入器对象
StreamWriter sw= new StreamWriter(fs);//传入文件流对象
//3. 执行写入操作
sw.Write("大家好,我在写入文件中,,,");
//4. 关闭写入器对象
sw.Close();
//5. 关闭文件流对象
fs.Close();读取文件:
1
2
3
4
5
6
7
8
9
10
11//1. 创建文件流对象
FileStream fs = new FileStream("test.txt", FileMode.Open);
//2. 创建读取器对象
StreamReader sr = new StreamReader(fs,Encoding.Default);
//3. 执行读取操作
string str = sr.ReadToEnd();
Console.WriteLine(str);
//4. 关闭读取器
sr.Close();
//5. 关闭文件流
fs.Close();注意事项:
如果一个程序用了多个流、读写器,它们的关闭顺序一般要和自身在程序中被创建的顺序相反。关闭原则 :先用后关
读取包含中文的TXT文件时,可能出现中文乱码:
Encoding.UTF8或Encoding.Default或Encoding.GetEncoding(“XXX”)
1
StreamReader sr = new StreamReader(fs,Encoding.Default);
2、文件/目录操作
File类:提供操作文件的各种方法
方法 说明 bool Exists(string path) 用于检查指定文件是否存在,该方法返回一个布尔值 void Copy(string sourceFileName,string destFileName) 将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,则在指定路径中新建一个文件 void Move (string sourceFileName, string destFileName) 将指定文件移动到一个新的路径 void Delete(string path) 删除指定的文件,如果指定的文件不存在,则不引发异常 演示案例:
1
2
3
4
5
6
7
8
9
10
11if (File.Exists("test.txt"))
{
Console.WriteLine("文件已经存在!");
//复制文件
File.Copy("test.txt","test1.txt",true);
Console.WriteLine("复制文件成功~");
//删除原来的文件
File.Delete("test.txt");
File.Move("test1.txt", "D://test.txt");
}Directory 类提供对文件夹的移动、删除等操作
方法 说明 bool Exists(string path) 用于检查指定文件夹在磁盘上是否存在 void Move(string sourceDirName, string destDirName) 用于将文件或目录及其内容移到新位置 void Delete(string path, bool recursive) 删除指定目录,如果bool指定true,则删除子目录中的所有目录内容 void Delete(string path) 从指定路径删除空目录
3、FileInfo类
概述:
FileInfo 类派生自 FileSystemInfo 类。它提供了用于创建、复制、删除、移动、打开文件的属性和方法,且有助于 FileStream 对象的创建。该类不能被继承。
属性:
方法:
演示案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17FileInfo fileInfo = new FileInfo("test1.txt");
//判断文件是否存在
if(fileInfo.Exists )
{
Console.WriteLine("文件存在~");
Console.WriteLine("文件名:"+fileInfo.Name);
Console.WriteLine("文件完整名:"+fileInfo.FullName);
Console.WriteLine("文件扩展名:"+fileInfo.Extension);
Console.WriteLine("文件大小:"+fileInfo.Length);
Console.WriteLine("文件创建时间:"+fileInfo.CreationTime);
fileInfo.CopyTo("test.txt");//复制文件
fileInfo.Delete();//删除文件
}显示结果:
4、DirectoryInfo类
概述:
DirectoryInfo 类派生自 FileSystemInfo 类。它提供了各种用于创建、移动、浏览目录和子目录的方法。该类不能被继承。
属性:
方法:
演示案例:
1
2
3
4
5
6
7
8
9
10
11
12
13DirectoryInfo directoryInfo = new DirectoryInfo("test");
if (directoryInfo.Exists)
{
Console.WriteLine("目录已经存在~");
Console.WriteLine("目录名称:"+directoryInfo.Name);
Console.WriteLine("目录完整名称:"+directoryInfo.FullName);
Console.WriteLine("目录创建时间:"+directoryInfo.CreationTime);
directoryInfo.MoveTo(Directory.GetCurrentDirectory());
directoryInfo.Delete();//删除空目录
directoryInfo.Delete(true);//删除目录及目录的子目录或文件
}
本章总结
本章作业
通过文件流,实现一个简单的记事本软件
完善11章作业的项目,网络电视精灵
开发小型资源管理器,可以浏览文件信息
实现文件复制
实现文件删除