C#数据流

一、数据流基本概念

当希望通过网络传输数据,或对文件数据进行操作时,首先需要将数据化成数据流。数据流是对串行传输数据的一种抽象表示。

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、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、网络流

当通过网络传输数据或对文件数据进行操作时,需要将数据转化为数据流的形式。在使用网络流时,数据在网络的各个位置之间以连续的字节形式传输。C#在System.Net.Sockets命名空间中提供了NetworkStream类用于收发网络数据 。

猜你喜欢

转载自blog.csdn.net/kenjianqi1647/article/details/82913171