• 【.Net实用方法总结】 整理并总结System.IO中StringReader类及其方法介绍


    🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
    🐬个人主页:会敲键盘的肘子
    🐰系列专栏:.Net实用方法总结
    🦀专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
    🐶座右铭:总有一天你所坚持的会反过来拥抱你。


    在这里插入图片描述

    🌈写在前面:

    本文主要介绍System.IO命名空间的StringReader 类,介绍其常用的方法和示例说明。


    👉本文关键字:System.IO、StringReader类、方法示例、C#

    1️⃣ System.IO命名空间

    .NET中的IO操作命名空间,包含允许读写文件数据流的类型以及提供基本文件和目录支持的类型。

    我们在.NET中的IO操作,经常需要调用一下几个类。

    • FileStream类

    ​ 文件流类,负责大文件的拷贝,读写。

    • Path类

    ​ Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。

    • File类

      File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。

    • Dirctory类

      目录操作,创建文件、删除目录,获取目录下文件名等等。

    2️⃣ StringReader类

    ♈ 定义

    实现从字符串进行读取的 TextReader

    public class StringReader : System.IO.TextReader
    
    • 1

    示例

    以下示例演示如何异步读取整个字符串。

    using System;
    using System.IO;
    using System.Text;
    
    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                ReadCharacters();
            }
    
            static async void ReadCharacters()
            {
                StringBuilder stringToRead = new StringBuilder();
                stringToRead.AppendLine("Characters in 1st line to read");
                stringToRead.AppendLine("and 2nd line");
                stringToRead.AppendLine("and the end");
    
                using (StringReader reader = new StringReader(stringToRead.ToString()))
                {
                    string readText = await reader.ReadToEndAsync();
                    Console.WriteLine(readText);
                }
            }
        }
    }
    // The example displays the following output:
    //
    // Characters in 1st line to read
    // and 2nd line
    // and the end
    //
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    StringReader 使你可以同步或异步读取字符串。 可以使用或ReadAsync方法一次读取字符、一次Read使用ReadLine或方法的行以及使用ReadToEndReadLineAsyncReadToEndAsync方法的整个字符串。

    ♉ 构造函数
    初始化从指定字符串进行读取的 StringReader 类的新实例。
    public StringReader (string s);
    
    • 1

    示例

    此代码示例是为 StringReader 类提供的一个更大示例的一部分。

    // From textReaderText, create a continuous paragraph
    // with two spaces between each sentence.
    string aLine, aParagraph = null;
    StringReader strReader = new StringReader(textReaderText);
    while(true)
    {
        aLine = strReader.ReadLine();
        if(aLine != null)
        {
            aParagraph = aParagraph + aLine + " ";
        }
        else
        {
            aParagraph = aParagraph + "\n";
            break;
        }
    }
    Console.WriteLine("Modified text:\n\n{0}", aParagraph);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    ♌ 常用方法
    Close() 关闭 StringReader
    public override void Close ();
    
    • 1
    Dispose() 释放由 TextReader 对象使用的所有资源
    public void Dispose ();
    
    • 1
    Read(Char[], Int32, Int32) 读取输入字符串中的字符块,并将字符位置提升 count
    public override int Read (char[] buffer, int index, int count);
    
    • 1

    参数

    buffer

    Char[]

    当此方法返回时,包含指定的字符数组,此数组中 index 和 (index + count - 1) 之间的值被从当前源中读取的字符所替换。

    index

    Int32

    buffer 中开始写入的位置。

    count

    Int32

    最多读取的字符数。 如果在将指定数量的字符读入缓冲区之前就已达读取器的末尾,则返回该方法。

    返回

    Int32

    已读取的字符数。 该数会小于或等于 count,具体取决于读取器中是否有可用的数据。 如果调用此方法时没有留下更多的字符供读取,则此方法返回 0(零)。

    ReadAsync(Char[], Int32, Int32) 异步从当前字符串中读取指定数目的字符并从指定索引开始将该数据写入缓冲区
    public override System.Threading.Tasks.Task ReadAsync (char[] buffer, int index, int count);
    
    • 1

    参数

    buffer

    Char[]

    当此方法返回时,包含指定的字符数组,此数组中 index 和 (index + count - 1) 之间的值被从当前源中读取的字符所替换。

    index

    Int32

    buffer 中开始写入的位置。

    count

    Int32

    最多读取的字符数。 如果在将指定数量的字符读入缓冲区之前就已达读取器的末尾,则返回该方法。

    返回

    Task<Int32>

    表示异步读取操作的任务。 TResult 参数的值包含读入缓冲区的总字节数。 如果当前可用字节数少于所请求的字节数,则该结果值可小于所请求的字节数;如果已到达流结尾时,则为 0(零)。

    示例

    以下示例演示如何异步读取字符串的前 23 个字符。

    using System;
    using System.IO;
    
    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                ReadCharacters();
            }
    
            static async void ReadCharacters()
            {
                string stringToRead = "Some characters to read but not all";
                char[] charsRead = new char[stringToRead.Length];
    
                using (StringReader reader = new StringReader(stringToRead))
                {
                    await reader.ReadAsync(charsRead, 0, 23);
                    Console.WriteLine(charsRead);
                }
            }
        }
    }
    // The example displays the following output:
    // Some characters to read
    //
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    ReadLine() 从当前字符串中读取一行字符并将数据作为字符串返回
    public override string? ReadLine ();
    
    • 1

    返回

    String

    读取器中的下一行,或 null(如果已读取所有字符)。

    示例

    此代码示例是为 StringReader 类提供的一个更大示例的一部分。

    // From textReaderText, create a continuous paragraph
    // with two spaces between each sentence.
    string aLine, aParagraph = null;
    StringReader strReader = new StringReader(textReaderText);
    while(true)
    {
        aLine = strReader.ReadLine();
        if(aLine != null)
        {
            aParagraph = aParagraph + aLine + " ";
        }
        else
        {
            aParagraph = aParagraph + "\n";
            break;
        }
    }
    Console.WriteLine("Modified text:\n\n{0}", aParagraph);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    ReadLineAsync() 从当前字符串中异步读取一行字符并将数据作为字符串返回
    public override System.Threading.Tasks.Task ReadLineAsync ();
    
    • 1

    返回

    Task<String>

    表示异步读取操作的任务。 TResult 参数的值包含来自字符串读取器的下一行或为 null 如果读取所有字符。

    示例

    以下示例演示如何从字符串异步读取一行。

    using System;
    using System.IO;
    using System.Text;
    
    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                ReadCharacters();
            }
    
            static async void ReadCharacters()
            {
                StringBuilder stringToRead = new StringBuilder();
                stringToRead.AppendLine("Characters in 1st line to read");
                stringToRead.AppendLine("and 2nd line");
                stringToRead.AppendLine("and the end");
    
                string readText;
    
                using (StringReader reader = new StringReader(stringToRead.ToString()))
                {
                    while ((readText = await reader.ReadLineAsync()) != null)
                    {
                        Console.WriteLine(readText);
                    }
                }
            }
        }
    }
    // The example displays the following output:
    //
    // Characters in 1st line to read
    // and 2nd line
    // and the end
    //
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    ReadToEnd() 读取从当前位置到字符串的结尾的所有字符并将它们作为单个字符串返回
    public override string ReadToEnd ();
    
    • 1

    返回

    String

    从当前位置到基础字符串的结尾之间的内容。

    示例

    此代码示例是为 TextReader 类提供的一个更大示例的一部分。

    static void ReadText(TextReader textReader)
    {
        Console.WriteLine("From {0} - {1}",
            textReader.GetType().Name, textReader.ReadToEnd());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ReadToEndAsync() 异步读取从当前位置到字符串的结尾的所有字符并将它们作为单个字符串返回
    public override System.Threading.Tasks.Task ReadToEndAsync ();
    
    • 1

    返回

    Task<String>

    表示异步读取操作的任务。 TResult 参数值包括字符串来自当前位置到结束字符串字符。

    示例

    以下示例演示如何异步读取整个字符串。

    using System;
    using System.IO;
    using System.Text;
    
    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                ReadCharacters();
            }
    
            static async void ReadCharacters()
            {
                StringBuilder stringToRead = new StringBuilder();
                stringToRead.AppendLine("Characters in 1st line to read");
                stringToRead.AppendLine("and 2nd line");
                stringToRead.AppendLine("and the end");
    
                using (StringReader reader = new StringReader(stringToRead.ToString()))
                {
                    string readText = await reader.ReadToEndAsync();
                    Console.WriteLine(readText);
                }
            }
        }
    }
    // The example displays the following output:
    //
    // Characters in 1st line to read
    // and 2nd line
    // and the end
    //
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    ♎ 更多方法

    更多方法请查阅官方文档StringReader类


    ⭐写在结尾:

    文章中出现的任何错误请大家批评指出,一定及时修改。

    希望写在这里的小伙伴能给个三连支持

  • 相关阅读:
    7. 核心功能(Core Features)
    从文件1到文件2传输内容
    Dos攻击与DDos攻击
    Livox SLAM(带LIO+闭环检测优化)
    7-RabbitMQ工作模式-Topics通配符模式
    【Python】-- 元组、字符串常用方法、序列切片
    golang读取conf文件的两种方式(ini和Viper)
    【C++设计模式之迭代器模式】分析及示例
    arm架构docker安装mysql5.7
    第5期ThreadX视频教程:单片机动态APP加载MPU玩法,隔离应用和系统,APP死机了系统也不会挂(2022-05-15)
  • 原文地址:https://blog.csdn.net/baidu_33146219/article/details/126800169