🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页: 会敲键盘的肘子
🐰系列专栏: .Net实用方法总结
🦀专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
🐶座右铭:总有一天你所坚持的会反过来拥抱你。
🌈写在前面:本文主要介绍System.IO命名空间的StringReader 类,介绍其常用的方法和示例说明。
👉本文关键字:System.IO、StringReader类、方法示例、C#
[TOC]
1️⃣ System.IO命名空间
.NET中的IO操作命名空间,包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。
我们在.NET中的IO操作,经常需要调用一下几个类。
- FileStream类
文件流类,负责大文件的拷贝,读写。
- Path类
Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。
- File类
File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。
- Dirctory类
目录操作,创建文件、删除目录,获取目录下文件名等等。
2️⃣ StringReader类
♈ 定义
实现从字符串进行读取的 TextReader。
public class StringReader : System.IO.TextReader
示例
以下示例演示如何异步读取整个字符串。
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
//
StringReader 使你可以同步或异步读取字符串。 可以使用或 ReadAsync方法一次读取字符、一次 Read使用 ReadLine或方法的行以及使用 ReadToEnd或 ReadLineAsync ReadToEndAsync方法的整个字符串。
♉ 构造函数
初始化从指定字符串进行读取的 StringReader 类的新实例。
public StringReader (string s);
示例
此代码示例是为 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);
♌ 常用方法
Close() 关闭 StringReader
public override void Close ();
Dispose() 释放由 TextReader 对象使用的所有资源
public void Dispose ();
Read(Char[], Int32, Int32) 读取输入字符串中的字符块,并将字符位置提升 count
public override int Read (char[] buffer, int index, int count);
参数
buffer
Char[]
当此方法返回时,包含指定的字符数组,此数组中
index
和 (index
+count
- 1) 之间的值被从当前源中读取的字符所替换。
index
在
buffer
中开始写入的位置。
count
最多读取的字符数。 如果在将指定数量的字符读入缓冲区之前就已达读取器的末尾,则返回该方法。
返回
Int32已读取的字符数。 该数会小于或等于
count
,具体取决于读取器中是否有可用的数据。 如果调用此方法时没有留下更多的字符供读取,则此方法返回 0(零)。
ReadAsync(Char[], Int32, Int32) 异步从当前字符串中读取指定数目的字符并从指定索引开始将该数据写入缓冲区
public override System.Threading.Tasks.Task<int> ReadAsync (char[] buffer, int index, int count);
参数
buffer
Char[]
当此方法返回时,包含指定的字符数组,此数组中
index
和 (index
+count
- 1) 之间的值被从当前源中读取的字符所替换。
index
在
buffer
中开始写入的位置。
count
最多读取的字符数。 如果在将指定数量的字符读入缓冲区之前就已达读取器的末尾,则返回该方法。
返回
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
//
ReadLine() 从当前字符串中读取一行字符并将数据作为字符串返回
public override string? ReadLine ();
返回
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);
ReadLineAsync() 从当前字符串中异步读取一行字符并将数据作为字符串返回
public override System.Threading.Tasks.Task<string?> ReadLineAsync ();
返回
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
//
ReadToEnd() 读取从当前位置到字符串的结尾的所有字符并将它们作为单个字符串返回
public override string ReadToEnd ();
返回
String从当前位置到基础字符串的结尾之间的内容。
示例
此代码示例是为 TextReader 类提供的一个更大示例的一部分。
static void ReadText(TextReader textReader)
{
Console.WriteLine("From {0} - {1}",
textReader.GetType().Name, textReader.ReadToEnd());
}
ReadToEndAsync() 异步读取从当前位置到字符串的结尾的所有字符并将它们作为单个字符串返回
public override System.Threading.Tasks.Task<string> ReadToEndAsync ();
返回
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
//
♎ 更多方法
更多方法请查阅官方文档 StringReader类。
⭐写在结尾:文章中出现的任何错误请大家批评指出,一定及时修改。
希望写在这里的小伙伴能给个三连支持!