C#中FileStream和StreamWriter/StreamReader的区别
其中创建FileStream对象最简单的构造函数如下:
FileStream file = new FileStream(fileName,FileMode.Member);//默认方式,可读可写
FileStream file = new FileStream(fileName, FileMode.Member, FileAccess.Member);
而FileAccess的成员:
|
成 员 |
说 明 |
|
Read |
打开文件,用于只读 |
|
Write |
打开文件,用于只写 |
|
ReadWrite |
打开文件,用于读写 |
对文件进行不是FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的身份验证级别改变用户对文件的访问权限。
在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess. ReadWrite。
FileMode枚举成员,使用每个值会发生什么,取决于指定的文件名是否表示已有的文件。
|
成 员 |
文 件 存 在 |
文件不存在 |
|
Append |
打开文件,流指向文件的末尾,只能与枚举FileAccess.Write联合使用 |
创建一个新文件。只能与枚举FileAccess.Write联合使用 |
|
Create |
删除该文件,然后创建新文件 |
创建新文件 |
|
CreateNew |
抛出异常 |
创建新文件 |
|
Open |
打开现有的文件,流指向文件的开头 |
抛出异常 |
|
OpenOrCreate |
打开文件,流指向文件的开头 |
创建新文件 |
|
Truncate |
打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期 |
抛出异常 |
FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据
StreamWriter允许将字符和字符串写入文件,它处理底层的转换,向FileStream对象写入数据。StreamReader也类似。
实例:
using System;
using System.Data;
using System.IO;
using System.Text;
/// Summary description for FileReadAndWrite
public class FileReadAndWrite
{
public FileReadAndWrite()
{
// TODO: Add constructor logic here
}
/// 用FileStream写文件
public void FileStreamWriteFile(string str)
{
byte[] byData;
char[] charData;
try
{
FileStream nFile = new FileStream("love.txt", FileMode.Create);
//获得字符数组
charData = str.ToCharArray();
//初始化字节数组
byData = new byte[charData.Length];
//将字符数组转换为正确的字节格式
Encoder enc = Encoding.UTF8.GetEncoder();
enc.GetBytes(charData, 0, charData.Length,byData,0,true);
nFile.Seek(0, SeekOrigin.Begin);
nFile.Write(byData, 0, byData.Length);
}
catch (Exception ex)
{
throw ex;
}
}
/// FileStream读取文件
public string FileStreamReadFile(string filePath)
{
byte[] data = new byte[100];
char[] charData = new char[100];
try
{
FileStream file = new FileStream(filePath, FileMode.Open);
//文件指针指向0位置
file.Seek(0, SeekOrigin.Begin);
//读入两百个字节
file.Read(data, 0, 200);
//提取字节数组
Decoder dec = Encoding.UTF8.GetDecoder();
dec.GetChars(data, 0, data.Length, charData, 0);
}
catch (Exception ex)
{
throw ex;
}
return Convert.ToString(charData);
}
/// StreamWriter写文件
public void StreamWriterWriteFile()
{
try
{
FileStream nFile = new FileStream("love.txt", FileMode.CreateNew);
StreamWriter writer = new StreamWriter(nFile);
writer.WriteLine("I love You!");
writer.WriteLine("Do you love me!");
writer.Close();
}
catch
{ }
}
/// StreamReader读取文件
public string StreamReaderReadFile()
{
string str="";
try
{
FileStream file = new FileStream("love.txt", FileMode.Open);
StreamReader sr = new StreamReader(file);
while (sr.ReadLine()!=null)
{
str += sr.ReadLine();
}
//或者str = sr.ReadToEnd();
sr.Close();
}
catch
{ }
return str;
}
}
C#中FileStream和StreamWriter/StreamReader的区别的更多相关文章
- C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、directoryInfo、Path、Encoding)
(FileStream.StreamWriter .StreamReader .File.FileInfo.Directory.DirectoryInfo.Path.Encoding) C#文 ...
- FileStream StreamWriter StreamReader BinaryReader
FileStream vs/differences StreamWriter? http://stackoverflow.com/questions/4963667/filestream-vs-dif ...
- C#中FileStream的对比以及使用方法
场景 File与FileStream的区别 举例: 将读取文件比作是从A桶往B桶运水. 使用File就是整个用桶倒进去,使用FileStream就是使用水管慢慢输送. FileStream与Strea ...
- File、FileStream、StreamWriter、StringWriter文件使用总结
一.File 1.File为静态类 File类,是一个静态类,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件.File类方法的参量很多时候都是路径path.主要提供有关文件的各种操作, ...
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- 【前端】js中new和Object.create()的区别
js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...
- SQL Server中Text和varchar(max)数据类型区别
SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...
随机推荐
- RobotFramework自动化2-自定义关键字【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/robotframework/ 前言 有时候一个页面上有多个对象需要操作,如果一个个去定 ...
- GitHub和GitLab的区别 转自(zhang_oracle)
把代码从GitHub上迁移到GitLab上,在使用一段时间过后,发现GitLab与GitHub还是有不少区别的. 先说一下相同点,二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitH ...
- Google C++ 编码规范(中文版)
Google C++ 编码规范(英文)在线地址:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml 中文版PDF下载:本地下载
- 让Asp.net Web预启动
IIS8以下解决方案: 当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP ...
- 恢复安装过树莓派相关操作系统的TF卡容量
原文地址:传送门 前言玩树莓派的都知道,当我们向TF卡写入系统后,在Windows下能识别的只有几百M的容量了,这主要是由于在装Linux系统的时候给TF卡分了Windows无法识别的分区,下面我用图 ...
- UVA 11149.Power of Matrix-矩阵快速幂倍增
Power of Matrix UVA - 11149 代码: #include <cstdio> #include <cstring> #include < ...
- kibana-metric
1. Visualize 新建图形 2. 选择图形类型 3. 选择索引 4. 设置metric参数 4.1 count 4.2 unique count 5. 保存图形
- [JZOJ3106]锻炼
题目大意: 给你一个$n\times m(n,m\leq 50)$的网格图,其中有一个四连通的障碍物.给定起点和终点,每次你可以走到和当前位置八连通的一个方格内,问绕障碍物一圈最短要走几格? 思路: ...
- lor实践
1.启动一个nginx监听8888端口, -p 指定工作目录 -c 指定加载配置文件 在nginx.conf中,写一个server,进入lor项目的入口文件main.lua 2.main.lua执行r ...
- SQL PARTITION BY:列值改变时重置计数
现有数据如下: 需求:以科目为单位 对分数进行排序 SELECT *, ROW_NUMBER() OVER (PARTITION BY 科目 ORDER BY 分数 DESC) AS NUM FROM ...