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 ...
随机推荐
- 6.DataFrame(列运算)
from odps import ODPS from odps.df import DataFrame o = ODPS(access_id="LTAIBb3aOF3ghjek", ...
- appium+python自动化26-模拟手势点击坐标(tap)【转载】
# 前言:有时候定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)那就拿出绝招:点元素所在位置的坐标 tap用法 1.tap是模拟手指点击,一般页面上元素的语法有两个参数,第 ...
- 解决:laravel出现Please provide a valid cache path.
SVN检出版本库上的项目后,访问首页出现如下提示: Please provide a valid cache path. 解决方法如下: 1.确保storage目录下有如app,framework,v ...
- Peak
A sequence of \(n\) integers \(a_1, a_2, \dots, a_n\) is called a peak, if and only if there exists ...
- Moving Average from Data Stream -- LeetCode
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- Java Socket编程详细解说
Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...
- Android入门之文件系统操作(一)简单的文件浏览器 (转)
Android入门之文件系统操作(一)简单的文件浏览器 (转) import java.io.File; import java.util.*; import android.app.A ...
- 5.Android之NFC介绍
NFC简介: Near Field Communication 近场通信,是一种数据传输技术. 与wifi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm. NFC支持3种工作 ...
- centos iptables关于ping
配置iptables策略后,一般来说INPUT都是DROP然后配置需要通过的 当执行: iptables -P INPUT DROP 后,机器就不能被ping通了! 因为icmp没有添加到规则中! 于 ...
- c#异步线程:同步调用,异步调用,异步回调
定义一个异步线程类: public class AsyEventClass { private static ILog logger = LogManager.GetLogger(MethodBase ...