一、前言
1、C# 通过数据流来执行I/O操作。
I/O数据流技术包括:文件操作、文件夹操作(目录操作)、I/O流
文件操作:使用File类、FileInto类 实现对文件的基本操作,如判断是否存在 、创建、移动、复制、删除、获取信息等。
文件夹操作:使用Directory类、DirectoryInfo类实现对文件夹的操作、如判断是否存在、创建、移动、删除、遍历等。
I/O操作:读写文件
2、 数据流基本概念
当希望通过网络传输数据,或对文件数据进行操作时,首先需要将数据化成数据流。数据流是对串行传输数据的一种抽象表示。
System.IO下的Stream类是所有数据流的基类,当我们对数据进行逐字节操作时,首先需要将数据转换为数据流。C#数据流主要分为三类:FileStream、MemoryStream、NetworkStream,还有常用的StreamReader、StreamWriter和TextWriter类等。
二、文件操作
1、FIie类
File类支持对文件的基本操作,包括提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象,由于所有的File类的方法都是静态的,所以如果只进行一个操作,那么使用File方法的效率比使用File方法的效率高。
知识补充:
静态方法:C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。
(1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!
(2)静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
(3)静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
(4)C#中的方法有两种:实例方法,静态方法.
静态方法销毁:主进程销毁时,内存中分配的静态方法销毁
2、FileInfo类
FileInfo类与FIie类之间的许多方法的调用都是相同的,但是FileInfo类没有静态方法,该类中的方法仅可以用于实例化对象。
3、使用方法
(1)判断文件是否存在
方一:
File.Exists("C:\\Test.txt");//判读C盘目录下是否存在Test.txt类
方二:
FileInfo finfo = new FileInfo("C:\\Test.txt");//创建文件对象
if(finfo.Exists) //判断文件是否存在
{
}
三、流
流:程序开发中将输入与输出设备之间的数据传递抽象为流。
(1)不同分类方式:
字节流:操作的数据单元是一个字节。
字符流:操作的数据单元是两个字节或一个字符,因为一个字符占用两个字节。
以内存的角度出发:
输入流:数据从数据源(文件、压缩包、视频等)流入内存的过程。
输出流:数据从内存流出到数据源的过程。
c#中最重要的是FileStream类,它提供了读取和写入文件的方式。
1、FileStream 文件流
文件流是字节序列的抽象概念,序列化用于将对象的状态存储到文件中。 FileStream类主要用于读写磁盘文件。常用于向磁盘存储数据或读取配置文件。
(1)创建FileStream实例
FileStream fs=new FileStream(string path,FileMode mode,FileAccess access);//文件所在的流程、文件创建的方式、文件的访问权限设置
FileInfo类创建FileStream对象的方法
FileStream fs=File.OpenWrite(@"C:\\File1.txt");//以只写的方式打开C盘目录下的File1.txt
FileStream fs=File.OpenRead(@"C:\\File1.txt");//以只读的方式打开C盘目录下的File1.txt
(2)流操作文本文件
使用I/O流操作文本文件时主要用到StreamWriter类和StreamReader类。
StreamWriter类:
可以向文本文件中写入字符串,同时负责重要的准换以及处理向FileStream对象写入的工作。
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";//设置文件保存格式
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName,true);
sw.WriteLine(textBox1.Text);//向创建的文件中写入流
sw.Close();//关闭当前写入流
}
StreamReader类:
用来读取文本文档的类。
用法:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "文本文件(*.txt)|*.txt";//设置文件的打开格式
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
//此处有Bug,因为Windows系统自己创建的记事本文件编码格式为ANSI,而下面读取时用了UTF8编码
//改正该程序,需要将UTF8编码换成默认编码即可,将Encoding.UTF8替换为Encoding.Default
StreamReader SReader = new StreamReader(textBox1.Text, Encoding.UTF8);
textBox2.Text = SReader.ReadToEnd();//将整个流或从流的当前位置到流的结尾作为字符串的读取
}
2、网络流
NetWorkStream类是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。C#在System.Net.Sockets命名空间中提供了NetworkStream类用于收发网络数据 。
3、内存流
MemoryStream类主要用于操作内存中的数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。
参考:https://www.cnblogs.com/mazhenyu/p/9139321.html