前言
文本读取在上位机开发中经常会使用到,实现的方式也有很多种,今天跟大家分享一下C#实现读取读取的7种方式。
这里我们先写好了一个测试界面,提供一个文件路径选择的入口,具体如下所示:
方式一
基于FileStream,并结合它的Read方法读取指定的字节数组,最后转换成字符串进行显示。
this.rtb_Content.Clear();
FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
int n = (int)fs.Length;
byte[] b = new byte[n];
int r = fs.Read(b, 0, n);
fs.Close();
this.rtb_Content.Text = Encoding.UTF8.GetString(b, 0, n);
方式二
基于FileStream,一个字节一个字节读取,放到字节数组中,最后转换成字符串进行显示。
this.rtb_Content.Clear();
FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
long n = fs.Length;
byte[] b = new byte[n];
int data, index;
index = 0;
data = fs.ReadByte();
while (data != -1)
{
b[index++] = Convert.ToByte(data);
data = fs.ReadByte();
}
fs.Close();
this.rtb_Content.Text = Encoding.UTF8.GetString(b);
方式三
基于File类,直接全部读取出来并显示。
this.rtb_Content.Clear();
this.rtb_Content.Text = File.ReadAllText(this.txt_FilePath.Text, Encoding.UTF8);
方式四
基于StreamReader,一行一行读取,最后拼接并显示。
this.rtb_Content.Clear();
StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);
string line = sr.ReadLine();
while (line != null)
{
this.rtb_Content.AppendText(line);
line = sr.ReadLine();
if (line != null)
{
this.rtb_Content.AppendText("\\r\\n");
}
}
sr.Close();
方式五
基于StreamReader,一次性读取到结尾,最后显示。
this.rtb_Content.Clear();
StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);
this.rtb_Content.Text = sr.ReadToEnd();
sr.Close();
方式六
基于StreamReader,一行一行读取,通过EndOfSteam判断是否到结尾,最后拼接并显示。
this.rtb_Content.Clear();
StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);
while (!sr.EndOfStream)
{
this.rtb_Content.AppendText(sr.ReadLine());
if (!sr.EndOfStream)
{
this.rtb_Content.AppendText("\\r\\n");
}
}
sr.Close();
方式7
基于FileStream和StreamReader来实现。
this.rtb_Content.Clear();
FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
this.rtb_Content.Text = sr.ReadToEnd();
fs.Close();
sr.Close();
测试结果
经过测试,以上每个方法都可以实现文本文件的读取。
总结
以上7种方式主要是分别基于FileStream、File和StreamReader这三种来实现的,这三种方式的区别在于:
- FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率。
- StreamReader的特点是,它只能对文本文件进行读写操作,可以一行一行的写入和读取。
- File类它是一个静态类,当我们查看file类的那些静态方法时,我们可以发现,在这个类里面的方法封装了可以执行文件读写操作的对象,例如:Filestream,StreamReader,我们通过File去执行任何文件的读写操作时,实际上是使用FileStream或SteamReader对象来执行文件的读写操作,代码如下所示:
public static string ReadAllText(string path, Encoding encoding)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
if (encoding == null)
{
throw new ArgumentNullException("encoding");
}
if (path.Length == 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
}
return InternalReadAllText(path, encoding, checkHost: true);
}
private static string InternalReadAllText(string path, Encoding encoding, bool checkHost)
{
using (StreamReader streamReader = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks: true, StreamReader.DefaultBufferSize, checkHost))
{
return streamReader.ReadToEnd();
}
}
-END-
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
字符串
+关注
关注
1文章
550浏览量
20109 -
上位机
+关注
关注
26文章
860浏览量
54041 -
Read
+关注
关注
0文章
10浏览量
11040
发布评论请先 登录
相关推荐
自己动手制作C#网页源码读取器教程
自己动手制作C#网页源码读取器: 制作步骤: 打开 "Microsoft Visual Studio 8" 创建工程和界面 由于比较简单大家
发表于 05-21 22:11
《Visual C# 2008程序设计经典案例设计与实现》---动态读取XMI文件
《Visual C# 2008程序设计经典案例设计与实现》---动态读取XMI文件.zip
发表于 07-08 13:21
《Visual C# 2008程序设计经典案例设计与实现》---Visual C# 2008与图形图像
`《Visual C# 2008程序设计经典案例设计与实现》---Visual C# 2008与图形图像.zip[hide][/hide]`
发表于 07-08 14:01
Python与C#对比
简洁优美, 简单,易学。拥有强大的标准库及第三方库。Python的使用范围极广。C#是微软公司推出的一种功能强大的高级编程语言,能够迅速、高效地完成Windows平台上的项目开发,被称为未来语言
发表于 05-14 17:14
C#数据进制转换显示错误是怎么回事?
现在遇到一个问题,下位机发送两个数据到上位机,上位机可以正确按字节接受到了。剩余的是将两个字节数据合并成一个整数,用于波形显示。具体如下单片机要发送的数据是:[C#] 纯文本查看 复制代码short
发表于 10-29 04:35
C#结合SMTP实现邮件报警通知分享
。SMTP是一种提供可靠且有效的电子邮件传输的协议,是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。今天主要跟大家分享一下如何通过C#结合SMTP来
发表于 07-02 06:57
基于C#使用开发板读写txt文档实验
第七节:基于C#使用开发板读写txt文档实验文章目录第七节:基于C#使用开发板读写txt文档实验一、实验目的:了解C#文件的读写。二、实验内容:用C#将
发表于 02-28 06:27
评论