• 文件操作、流相关类梳理


      平时很少用到文件操作和流,所以每次用的时候都是百度,不明不白,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类似,相反,就不过多少了。

      

  • 相关阅读:
    uni-appios端app白屏问题
    vue中倒计时假清除
    vue路由守卫
    JS函数命名规范
    VUE生成二维码
    移动端H5之css配置rem
    关于在vue中使用ui库样式无法修改的问题
    v28 error: resource android:attr/dialogCornerRadius not found.
    cocos2d: fullPathForFilename: No file found at script/jsb_prepare.js. Possible missing file
    android studio clean show: CreateProcess error=2, 系统找不到指定的文件。
  • 原文地址:https://www.cnblogs.com/MicroHeart/p/11158508.html
Copyright © 2020-2023  润新知