C# StreamReader类和StreamWriter类

b9eb4eb369833c0b0a88c4815484b379.png

先看看 StreamReader,将前面的示例转换为读取文件以使用 StreamReader。它现在看起来容易得多。StreamReader 的构造函数接收FileStream。使用 EndOfStream 属性可以检查文件的末尾,使用ReadLine 方法读取文本行:

public static void ReadFileUsingReader(string fileName)
{var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);using (var reader = new StreamReader(stream)){while (!reader.EndofStream){string line = reader.ReadLine(); Console.WriteLine(line);}}
}

2321eac49b181a7d5cf1ce9bae6cfb21.png

不再需要处理字节数组和编码。然而注意,StreamReader 默认使用 UTF-8 编码。指定另一个构造函数,可以让 StreamReader 使用文件中序言定义的编码:

var reader = new StreamReader(stream, detectEncodingFromByteOrderMarks: true);

40ea57f95d4c8d0a18f1e89e40849d88.png

也可以显式地指定编码:

var reader = new StreamReader(stream, Encoding.Unicode);

baec530b28f04bcde2f121b7c2582e25.png

其他构造函数允许设置要使用的缓冲区;默认为 1024 个字节。此外,还可以指定关闭读取器时不应该关闭底层流。默认情况下,关闭读取器时(使用 Dispose 方法),会关闭底层流。

3d6b7f070b3d33ff863a29cfb03fabae.png

不显式实例化新的 StreamReader,而可以使用 File 类的 OpenText 方法创建StreamReader:

var reader = File.OpenText(fileName);

751358b2963795de35e0c67cbbb94555.png

对于读取文件的代码片段,该文件使用 ReadLine 方法逐行读取。StreamReader还允许在流中使用 ReadToEnd 从光标的位置读取完整的文件:

string content = reader.ReadToEnd();

c2b50e1e1eec6029354ae47913f881e8.png

StreamReader 还允许把内容读入一个字符数组。这类似于 Stream 类的 Read 方法;它不读入字节数组,而是读入 char 数组。记住,char 类型使用两个字节。这适合于 16 位 Unicode,但不适合于 UTF-8,其中,一个字符的长度可以是 1 至 6 个字节:

int nChars = 100;
char[] charArray = new char[nChars];
int nCharsRead = reader.Read(charArray, 0, nChars);

c6a38bf5de13c73035acbb70db0d591f.png

StreamWriter 的工作方式与 StreamReader 相同,只是 StreamWriter 仅用于写入文件(或写入另一个流)。下面的代码片段传递 FileStream,创建了一个 StreamWriter。然后把传入的字符串数组写入流:

public static void WritefileUsingWriter(string fileName, string[] lines)
{var outputStream = File.OpenWrite(fileName); using (var writer = new StreamWriter(outputStream)) {byte[] preamble = Encoding.UTF8.GetPreamble();outputStream.Write(preamble, 0, preamble.Length);  writer.Write(lines);}
}

d97e4ca7390c7d6eb41e397733ac6256.png

记住,StreamWriter 默认使用 UTF-8 格式写入文本内容。通过在构造函数中设置 Encoding 对象,可以定义替代的内容。另外,类似于 StreamReader 的构造函数,StreamWriter 允许指定缓冲区的大小,以及关闭写入器时是否不应该关闭底层流。

384a3899090dcd4c72e01f9852c75018.png

StreamWriter 的 Write() 方法定义了 17 个重载版本,允许传递字符串和一些 .NET 数据类型。请记住,使用传递 .NET 数据类型的方法,这些都会使用指定的编码变成字符串。

01552f31a9f45ad0534b75e1549bfd80.png

ba0ad69958aed41d3e4ba0d2f65b9fd1.png

 微信公众号 

Dotnet讲堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DIV+CSS列表式布局(同意图片的应用)

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http://www.w3.org/1999/xhtml">3 <head>4 <!--gbk,gb2312 中文-->5 &…

斯皮尔曼等级相关

一、斯皮尔曼等级相关简介 斯皮尔曼等级相关(Spearman’s correlation coefficient for ranked data)主要用于解决称名数据和顺序数据相关的问题。适用于两列变量,而且具有等级变量性质具有线性关系的资料。由英国心理学家、统计学家斯皮尔曼根据积差相关的概念推到而来,一…

用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...

招人背景首先说一下朋友的公司招人背景&#xff0c;公司招聘PHP高级岗位&#xff0c;负责公司的B2B项目研发、并发问题的处理和解决。领导给了他两个要求&#xff1a;&#xff08;接下来的讲述我会以朋友的第一人称来进行&#xff09;&#xff08;1&#xff09;技术比较好&…

React Native之导出

1 React Native里面一般导出函数或者常量或者组件 如果是默认组件或者类(export default修饰)的话,在另外一个地方导入的时候不需要加上{},格式如下 导出 export default class Student {} 导入 import Student from "./file"如果不是默认组件或类或则方法或则变量…

Windows 11 新版 22598 发布!引入 4K 聚焦壁纸,优化全新任务管理器和媒体播放器...

面向 Dev 和 Beta 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22598。主要变化1.微软宣布媒体播放器应用程序现已更新&#xff0c;进一步适配 Windows 11 的视觉设计。在播放视频时右键将看到全新的菜单&#xff0c;此外还提高了该应用的性…

Mealy状态机的一点理解

在Mealy状态机中&#xff0c;输出是由输入和现态决定的。而状态机的次态是由输入的变化和现态决定的。这个特点决定了再verilog中实现的方式。建议简单的状态机就使用两段式always结构。 一个always中进行状态的转换&#xff0c;一个always中进行输出状态的变化。 刚刚已经说过…

js运行机制

说到js的运行机制&#xff0c;那么就要先从几个名词开始&#xff0c;这是为了让更多的人能看懂。如下&#xff1a;进程和线程&#xff1a;进程&#xff1a;进程是正在运行的程序的实例。程序关于数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#…

javafx 推箱子小游戏object类_突破LeetCode Hard模式之《推箱子》

导读&#xff1a;算法哥好久没分享有趣的算法题了&#xff0c;有点寂寞空虚冷&#xff0c;今天看到一道似曾相识的题目&#xff0c;而且难度是hard模式&#xff0c;勾起了算法哥的征服欲。特分享之&#xff01;题目描述「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需…

利用Excel VBA实现批量数据分组转置

问题:如上图所示,按lon,lat分组,再进行转置。 VBA代码: Sub admin()Dim conn, xRs, xFdSet conn = CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.Jet.Oledb.4.0;" & _"Extended Properties= Excel 8.0;hdr=yes;IMEX=1 …

.NET 7 Preview 3添加了这些增强功能

.NET 7 Preview 3 已发布&#xff0c; .NET 7 的第三个预览版包括对可观察性、启动时间、代码生成、GC Region、Native AOT 编译等方面的增强。有兴趣的用户可以下载适用于 Windows、macOS 和 Linux 的 .NET 7 Preview 3。Microsoft 建议使用Visual Studio 17.2 Preview 3 的 预…

MySQL基本分区表

2019独角兽企业重金招聘Python工程师标准>>> 准备工作 1、查看数据库的信息 了解当前的Mysql数据库的版本和平台以及字符集等相关信息 mysql> status -------------- mysql Ver 14.14 Distrib 5.6.17, for Win64 (x86_64)Connection id: 4 Current dat…

分段线性拟合经典案例:计算多年气温最低值和最高值的分段线性变化趋势(附分段线性拟合工具下载)

分段线性回归:是用虚拟变量估计不同数量水平的解释变量对被解释变量的影响。在经济关系中,当解释变量X的值达到某一水平X′之前,与被解释变量之间存在某种线性关系;当解释变量X的值达到或者超过X′以后,与被解释变量的关系就会发生变化。此时,如果已知X的转折点X′,我们…

谷歌不支持调用摄像头麦克风_谷歌发布安卓11系统:全新界面、更严的隐私管理...

来源&#xff1a;快科技在发布三个beta版之后&#xff0c;谷歌刚刚发布了安卓11(Android 11)正式版&#xff0c;主要加强了聊天气泡、安全隐私、电源菜单&#xff0c;以及对各种新屏幕&#xff0c;如瀑布屏、折叠屏、双屏的支持。最近几个版本的安卓系统其实变化都不是很大&…

POJ2676,HDU4069解决数独的两种实现:DFS、DLX

搜索实现&#xff1a;解决数独有两种思考策略&#xff0c;一种是枚举当前格能填的数字的种数&#xff0c;这里有一优化策略就是先搜索能填入种数小的格子&#xff1b;另一种是考虑处理某一行&#xff08;列、宫&#xff09;时&#xff0c;对于某一个没用过的数字&#xff0c;若…

工业互联网上市公司.NET开发岗位来袭!!!

01公司简介2022 ABOUT /公司简介安徽容知日新科技股份有限公司&#xff08;股票代码&#xff1a;688768&#xff09;于2007年在合肥市成立&#xff0c;是一家工业互联网领域的高新技术企业&#xff0c;为客户提供设备智能运维平台解决方案和动设备预测性维护产品及服务。容知日…

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记24 popovers弹窗

上几话中我们详细了解了几种segue&#xff0c;我们也了解到了多MVC模式的几种控制器&#xff0c;比如导航、选项卡和分栏&#xff0c;除了这三种多MVC的模式之外&#xff0c;还有一种popover&#xff0c;它跟其他三种不太一样。首先先来认识一下popover&#xff08;弹窗&#x…

React Native之didFocus和didBlur

1 didFocus和didBlur解释 didFocus - the screen focused (if there was a transition, the transition completed)didBlur - the screen unfocused (if there was a transition, the transition completed) didFocus是指当前页面第一次加载的时候会调用一次 didBlur是指当前…

python语法详解_解析 Python3 基础语法

行与缩进 python最具特色的就是使用缩进来表示代码块&#xff0c;不需要使用大括号 {} 。 缩进的空格数是可变的&#xff0c;但是同一个代码块的语句必须包含相同的缩进空格数。实例如下&#xff1a; if True: print ("True") else: print ("False") Color…

ASP.NET 6 中间件 - 介绍与基础

这是一个关于 .NET 6 中间件的系列文章。在这个系列中&#xff0c;我们将了解到什么是中间件&#xff0c;它能够做什么&#xff0c;以及我们为什么要使用它&#xff0c;并演示几种不同类型的中间件的实现。之后&#xff0c;我们会进一步了解中间件所在的管道&#xff0c;以及如…