在.NET Framework 中进行的所有输入和输出工作都要用到流(stream)
有两种类型的流:
- 输出流:当向某些外部目标写入数据时,就要用到输出流(将数据写入到文件中)。
- 输入流:用于将数据读入程序可以访问的内存或变量中(从文件中读入数据到内存或者变量中)。
下面列出文件操作的一些常用类:
类名 | 说明 |
File | 静态实用类,提供许多静态方法,用于移动、复制和删除文件 |
Directory | 静态实用类,提供许多静态方法,用于移动、复制和删除文件 |
Path | 实用类,用于处理路径名称 |
FileStream | 表示可写或可读,或二者均可的文件。此文件可以同步或异步地读写 |
StreamReader | 从流中读取字符数据,可以使用FileStream 将其创建为基类 |
StreamWriter | 向流写入字符数据,可以使用FileStream 将其创建为基类 |
其中File 类的常用方法有:
方法 | 说明 |
Copy() | 将文件从源位置复制到目标位置 |
Create() | 在指定的路径上创建文件 |
Delete() | 删除文件 |
Open() | 返回指定路径上的FileStream 对象 |
Move() | 将指定的文件移动到新位置。可以在新位置为文件指定不同的名称 |
eg:
File.Create(@"F:abc.txt"); //创建文件 abc.txt File.Copy(@"F:abc.txt",@"F:Filesabc.txt"); //将 abc.txt 文件 复制到 Files文件夹中(开始里面没有abc.txt文件)
检查是否存在某个文件:
bool t = File.Exists(@"F:Test.txt"); Console.WriteLine(t);
Directory类(静态类)的常用方法
创建文件夹:
创建文件夹 静态类 Directory.CreateDirectory(@"F:Test1"); Directory.Delete(@"F:Test1");
获取应用程序的当前目录:
string path = Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录 Console.WriteLine(path);
FileStream对象
FileStream 对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader 或StreamWriter 执行这些功能。这是因为FileStream 类操作的是字节和字节数组(byte[]),而Stream 类操作的是字符数据(char[])。
FileStream类有两个常用的构造函数:
第一个:
FileStream aFile = new FileStream(filename, FileMode.<Member>);
第二个:
FileStream aFile = new FileStream(filename, FileMode.<Member>, FileAccess.<Member>);
其中 FileMode.<Member> 和 FileAccess.<Member> 是个枚举值。
其中FileMode.<Member>取值为:
FileAccess.<Member>取值为:
使用 FileStream类 从文件中读出数据
byte[] byData = new byte[200]; char[] charData = new char[200]; try { FileStream aFile = new FileStream(@"F:Test.txt", FileMode.Open); //使用指定的路径和创建模式初始化 FileStream 类的新实例。 aFile.Seek(1, SeekOrigin.Begin); //从文件的第几个字符开始查找,下标从0开始,这里相当于从b开始计算 aFile.Read(byData, 0, 200); //读出文件中的数据,并存在 byData字节数组中 } catch (System.Exception ex) { Console.WriteLine("An Exception Occured!"); Console.WriteLine(ex.ToString()); Console.ReadKey(); } //Decoder类 将一个字节数组转换为字符数组 用于输出 Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); //该方法用于提取 字节数组 byData , 并存储在 charData字节数组中 Console.WriteLine(charData); //输出 charData数组中的数据 Console.ReadKey();
使用FileStream 类向文件中写入数据
byte[] byData = new byte[200]; char[] charData = new char[200]; //将输入的字符串存入到字符数组 charData[] 中 Console.Write("请输入一个字符串:"); string temp = Console.ReadLine(); for (int i = 0; i < temp.Length; i++) { charData[i] = temp[i]; } //将字符数组转化为字节数组 Encoder en = Encoding.UTF8.GetEncoder(); en.GetBytes(charData, 0, charData.Length, byData, 0, true); //File.Create(@"F:Temp.txt"); FileStream fs = new FileStream(@"F:Temp1.txt", FileMode.CreateNew); fs.Seek(0, SeekOrigin.Begin); fs.Write(byData, 0, 200); //此处已将字符写入到 字节数组byData中
使用 StreamReader 和 StreamWriter 对文件进行最简单的读写操作
进行写操作:
//最简单的把向文件中写入数据 StreamWriter sw = new StreamWriter("text2.txt"); sw.Write("hello world"); sw.Close();
此段代码将在你的项目中 ..inDebug 中产生一个 text2.txt的文本文件, 其中写入了内容 " hello world ".
进行读操作: (只返回一行数据)
StreamReader sr = new StreamReader("text2.txt"); string str = sr.ReadLine(); // ReadLine() 只能返回一行字符串 sr.Close(); Console.WriteLine(str);
输出结果:
若想返回文件中的全部内容,则使用 StreamReader 的 Read()方法
//创建一个缓冲区来接收从流中读出的数据 char[] data = new char[10000]; StreamReader sr = new StreamReader("text2.txt"); sr.Read(data, 0, data.Length); sr.Close(); Console.WriteLine(data);
输出结果: