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)主要用于解决称名数据和顺序数据相关的问题。适用于两列变量,而且具有等级变量性质具有线性关系的资料。由英国心理学家、统计学家斯皮尔曼根据积差相关的概念推到而来,一…

怎么在mysql中打开表存信息,我应该如何存储用户的“收藏夹”在mySQL表?

I keep reading that I should store this in a separate table "with one value per line". What does this mean exactly? Like this - So that each "favoriting" gets another user entry?USER_ID SKU_Favorited001 10016001 10067024 10016001 1001…

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

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

gdb可以查询执行文件的宏, 但是查询不了o文件的宏

在gcc使用-g3编译的时候, gdb可以查看对应c语言的宏. gdb a.out -ex list main -ex info macro XXXX -ex q Defined at /xvdc/w.c:6 #define XXXX ppppppppppppp 但是o文件却看不了对应的宏, gdb w.o -ex list main -ex info macro XXXX -ex q The symbol XXXX has no defin…

Python-os.path 学习

import osprint(#########################) # 当前路径 绝对路径 print("path is:\t", os.path.abspath(__file__)) # 当前路径 绝对路径 上一级目录 print("path is:\t", os.path.abspath(".")) # 当前路径 绝对路径 上上一级目录 print("…

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;此外还提高了该应用的性…

Excel VBA将所有Sheet重命名为单元格a1的名称

Sub RenameSheet() Dim i As Integer For i 1 To Sheets.CountSheets(i).Name Sheets(i).Range("A1").Value Next End Sub

Mealy状态机的一点理解

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

怎样连接mysql文件_如何连接MYSQL数据库?

假设您的mysql数据库资料如下&#xff1a;MYSQL数据库名: testMYSQL帐号&#xff1a;public_test1MYSQL密码&#xff1a;test2免费赠送三级域名&#xff1a;test.u8.1358.netMYSQL数据库的管理:请您首先下载PhpMyAdmin软件&#xff0c;将此文件包解压&#xff0c;找到其中的一个…

得到时间字符串|程序当前的目录

CTime time CTime::GetCurrentTime();CString name_t time.Format("%Y%m%d%H%M%S"); //获得应用程序路径和资源文件路径GetModuleFileName(NULL, FilePath, MAX_PATH);(_tcsrchr(FilePath, _T(\\)))[0] 0; 转载于:https://www.cnblogs.com/mycway/p/4439619.html

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 …

Git之Stash(储藏)备份当前的工作区的内容

1 今天遇到的问题 我Git关联的项目,本地做了修改,然后我需要git pull拉别人的代码或者我需要修改其它的bug,本地做了修改我又不想合并,这个时候就可以使用git stash git stash:备份当前的工作区的内容,将当前的工作区内容保存到Git栈中 git stash list:显示Git栈内的所有备份…

Comparison of video container formats

Comparison of video container formats MOV跟MP4具体区别在哪里&#xff1f;转载于:https://www.cnblogs.com/jingzhishen/p/5205235.html

.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…

mysql分页存储过程 分页查询语句_分页存储过程(用存储过程实现数据库的分页代码)...

用存储过程实现数据库的分页代码,加快页面执行速度。具体的大家可以测试下。--*******************************************************--* 分页存储过程 *--* 撒哈拉大森林 *--* 2010-6-28 *--*******************************************************if exists(select * f…