C# FileStream
FileStream类操作的是字节和字节数组,而stream类操作的是字符数据。字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。
FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。
FileStream只能处理原始字节(raw byte),处理原始字节的功能使用FileStream类可以用于处理任何数据文件。
通过读取字节数据,FileStream对像可以用于读取图像和声音。代价是FileStream类不能将数据直接读入字符串
此指针可以修改用Seek方法,它有两个参数:
第一个参数:规定文件指针以字节为参数的移动距离
第二个参数:规定开始计算的起始位置
byte[] byDataValue = new byte[200];
char[] charDataValue = new char[200];
/// <summary>
/// FilesStream读取用法
/// </summary>
private void FilesStreamReadFile()
{
try
{
FileStream fsFile = new FileStream(@"d:\log.cs", FileMode.Open);
//文件指针移到文件的135个字节
fsFile.Seek(135, SeekOrigin.Begin);
//将接下来的字节读到Array中
fsFile.Read(byDataValue, 0, 200);
}
catch (Exception e)
{
throw e;
}
//将字节转换成字符
Decoder dc = Encoding.UTF8.GetDecoder();
//字节数组转换成字符数组,便于显示
dc.GetChars(byDataValue, 0, byDataValue.Length, charDataValue, 0);
}
/// <summary>
/// FilesStream写入用法
/// </summary>
private void FileStreamWriteFile()
{
FileStream fsFile = new FileStream(@"D:\log.txt", FileMode.Create);
charDataValue="This is test string".ToCharArray();
byDataValue=new byte[charDataValue.Length];
//将字符数组转换成字节数组
Encoder ec=Encoding.UTF8.GetEncoder();
ec.GetBytes(charDataValue,0,charDataValue.Length,byDataValue,0,true);
//将指针设定起始位置
fsFile.Seek(0,SeekOrigin.Begin);
//写入文件
fsFile.Write(byDataValue,0,byDataValue.Length);
}
FileStream对象通常会在StreamWriter或StreamReader内使用,并使用它们的方法处理文件。
/// <summary>
/// StreamWriter写入方法
/// </summary>
private void StreamWriterMetod()
{
try
{
FileStream fsFile = new FileStream(@"d:\log.txt",FileMode.OpenOrCreate);
StreamWriter swWriter = new StreamWriter(fsFile);
//写入数据
swWriter.WriteLine("Hello Wrold.");
swWriter.WriteLine("It is now {0}", DateTime.Now.ToLongDateString());
swWriter.Close();
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// StreamWriter读取方法
/// </summary>
private void StreamReaderMetod()
{
string sLine = "";
try
{
FileStream fsFile = new FileStream(@"d:\log.txt", FileMode.Open);
StreamReader srReader = new StreamReader(fsFile);
//读取文件(读取大文件时,最好不要用此方法)
sLine = srReader.ReadToEnd();
txbValue.Text = sLine;
srReader.Close();
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// StreamWriter读取方法2
/// </summary>
private void StreamReaderMetodTwo()
{
try
{
FileStream fsFile = new FileStream(@"d:\log.txt", FileMode.Open);
StreamReader srReader = new StreamReader(fsFile);
int iChar;
iChar = srReader.Read();
while (iChar != -1)
{
txbValue.Text += (Convert.ToChar(iChar));
iChar = srReader.Read();
}
srReader.Close();
}
catch (Exception e)
{
throw e;
}
}
注:FileMode枚举成员值在文件存在与不存在时的情况
Append
文件存在时:打开文件,流指向文件的末尾,只能与枚举FileAcess.Write联合使用
文件不存在时:创建一个新文件。只能与枚举FileAcess.Write联合使用
Create
文件存在时:删除该文件,然后创建新文件
文件不存在时:创建新文件
CreateNew
文件存在时:抛出异常
文件不存在时:创建新文件
Open
文件存在时:打开现有文件,流指向文件开头
文件不存在时:抛出异常
OpenOrCreate
文件存在时:打开文件,流指向文件开头
文件不存在时:创建新文件
Truhncate
文件存在时:打开现有文件,清除其内容。流指向文件开头,保留文件的初始创建日期。
文件不存在时:抛出异常
转载于:https://www.cnblogs.com/zhangzhu/archive/2012/05/10/2495030.html
C# FileStream相关推荐
- 在SQL Server 2008中配置文件流(FILESTREAM)
SQL Server 2008推出了一个新的特性叫做文件流(FILESTREAM),它使得基于SQL Server的应用程序可以在文件系统中存储非结构化的数据,例如文档.图片.音频.视频等等.文件流主 ...
- 如何启用SQL Server 2008的FILESTREAM特性
如何启用SQL Server 2008的FILESTREAM特性 今天安装SQL Server 2008的时候没有注意,忘记了启用FILESTREAM特性,因为默认情况下FILESTREAM是禁用的. ...
- FileStream 的FileShare一点小认识
C#读写文本文件一般都是用StreamWriter来实现(读书的时候就这样用.毕业后这几年基本也是这样干的),通常代码例如以下: using (StreamWriter sw = new Stream ...
- Sqlserver2008 FileStream解决图片存储问题
Sqlserver2008 FileStream解决图片存储问题 参考文章: (1)Sqlserver2008 FileStream解决图片存储问题 (2)https://www.cnblogs.co ...
- FileStream 和StreamWriter 一起用时
StreamWriter Flush 即可. FileStream Flush 无用. 转载于:https://www.cnblogs.com/runliuv/p/3173454.html
- .NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead
本文首发在IT168 写这个系列原本的想法是讨论一下.NET中异步编程风格的变化,特别是F#中的异步工作流以及未来的.NET 5.0中的基于任务的异步编程模型.但经过三篇文章后很多人对IO异步背后实现 ...
- c#FileStream文件读写(转)
/C#文件流写文件,默认追加FileMode.Append string msg = "okffffffffffffffff"; ...
- FileStream实现多线程断点续传(已封装)
处理文件分片 处理缺失的分片文件 合并分片文件 MD5验证文件 using System; using System.Collections.Generic; using System.IO; usi ...
- 在SharePoint 2010系统中安装RBS FILESTREAM Provider
在SharePoint 2010系统中安装RBS FILESTREAM Provider 这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL ...
- Winform中使用FileStream读取文件后,继续操作提示:it is being used by anothor process
场景 使用Winform搭建FTP客户端之后,读取本地某路径下的文件,然后将文件读取进行上传,再删除,在进行删除时提示: System.IO.IOException:The process cannn ...
最新文章
- Python内置函数(57)——setattr
- web前端——让人头疼的多列复选框排列解决办法
- Vue-使用webpack+vue-cli搭建项目
- 一文纵览EMAS 到底内含多少阿里核心技术能力
- python中isinstance(3、object)_python中isinstance函数判断各种类型的小细节
- menu什么意思中文意思_alternate什么意思
- Struts2简单入门实例
- WPF--常用布局介绍
- Redis数据类型之字符串String
- 换个服务器后网页加载很慢,打开网页很缓慢?换个DNS轻松解决问题
- Apache虚拟主机的实现方式
- 全球500强的网站只有500个!强者生存!
- windows中docker 安装和使用
- LYZ-Ice Skates
- 3D目标检测——代码理解——Second代码:数据处理kitti_dataset.py的理解
- KVM虚拟机快速入门
- python中安装gensim包
- 正在从你的计算机中删除office,手动删除Office 2013或Office 365即点即用安装的步骤...
- 一文告诉你什么叫边缘计算
- QT 中改变文字颜色 字体 形状
热门文章
- 更开放的分布式事务 | Fescar 品牌升级,更名为 Seata
- phinx数据库脚本迁移工具
- iOS ReactiveCocoa 最全常用API整理
- 让解析器可以快速处理词法单元之间的空格
- 国内交通产业进入新纪元 智能加码功不可没
- Oracle中函数/过程返回结果集的几种方式
- CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
- 根据osdid 查询磁盘是ssd盘还是sas盘
- build_doxygen_报找不到iconv.....
- Qt 发布 Android 自动驾驶技术预览