文件操作、流相关类梳理

  平时很少用到文件操作和流,所以每次用的时候都是百度,不明不白,Copy过去就行了,中间也有去整理,由于没有记笔记,用得少,一段时间又忘记了。这次来一次彻彻底底的梳理。

一、继承关系图

二、文件和文件夹操作类

  File和FileInfo:是文件操作类,可以对文件进行创建、修改、删除、移动等,只要对文件能进行的操作都有提供。

  Directory和DirectoryInfo:是文件夹操作类,提供了创建、删除、移动文件夹,获取文件夹的子文件夹等。

  其中File和Directory都是静态类。区别在于File和Directory在操作同一个文件/文件夹的时候,每次都会进行安全检查。而FileInfo和DirectoreyInfo在操作同一个文件/文件夹的时间,只会检查一次。

 三、Writer操作类

  Writer相关类:

    顾名思义,Writer相关类都是写入到流、字符串中。下面几种Writer就与之对应。

  3.1 BinaryWriter:

    构造函数需要传递Stream,而BinaryWriter就是将二进制写入到此流中去,如果这个流是通过文件获得,则文件就会写到文件中。如果流通过内存获得,就会写入到内存中。

            byte[] data = new byte[10];
            using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(@"c:\1.txt", FileMode.Create)))//流从文件中获取,写入流也就是写入文件
            {
                binaryWriter.Write("a");
                binaryWriter.Write(56);
                binaryWriter.Write(false);
                binaryWriter.Write(data);
                binaryWriter.Write('b');
                binaryWriter.Flush();
            }

            using (MemoryStream memoryStream = new MemoryStream())//流从内存中获取,写入流也就是写入内存中
            {
                BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
                binaryWriter.Write("a");
                binaryWriter.Write(56);
                binaryWriter.Write(false);
                binaryWriter.Write(data);
                binaryWriter.Write('b');
                binaryWriter.Flush();

                data = new byte[10];
                memoryStream.Seek(0, SeekOrigin.Begin);
                memoryStream.Read(data, 0, (int)memoryStream.Length);
            }

  3.2 StreamWriter:

    构造函数需要传递Stream或者文件路径。跟BinaryWriter很像,主要方法也是Write方法,而且他的Write方法跟BinaryWriter一样,它的写入对象也是流。

            using (StreamWriter streamWriter = new StreamWriter(File.Open(@"c:\3.txt", FileMode.Create)))
            {
                streamWriter.Write("a");
                streamWriter.Write(56);
                streamWriter.Write(false);
                streamWriter.Write(data);
                streamWriter.Write('b');
                streamWriter.Flush();
            }

StreamWriter和BinaryWriter的区别:

   BinaryWriter:查看源码可以看到,在写入流之前,会将Int、Double、decimal、long、float的值转为字节数组,然后写入文件流。在写入string类型的,会将String类型变为四个无符号整数,这就导致在打开二进制文本的时候前面多个0100 打开文本显示的是ETO。BinaryWriter本质上将二进制写入流中。

     StreamWriter:所见即所得。你写入文件中流的内容,打开文件和你看到的一样。而BinaryWriter写入到文件,打开是会乱码的。

   3.3 StringWriter:

    构造函数需要传递StringBuilder,将数据写入到StringBuilder中。所以StringWriter只能对字符串操作。

四、Reader操作类

   跟Writer类似,相反,就不过多少了。

 

  

posted @ 2019-07-22 10:36  MicroHeart!  阅读(...)  评论(... 编辑 收藏