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相关推荐

  1. 在SQL Server 2008中配置文件流(FILESTREAM)

    SQL Server 2008推出了一个新的特性叫做文件流(FILESTREAM),它使得基于SQL Server的应用程序可以在文件系统中存储非结构化的数据,例如文档.图片.音频.视频等等.文件流主 ...

  2. 如何启用SQL Server 2008的FILESTREAM特性

    如何启用SQL Server 2008的FILESTREAM特性 今天安装SQL Server 2008的时候没有注意,忘记了启用FILESTREAM特性,因为默认情况下FILESTREAM是禁用的. ...

  3. FileStream 的FileShare一点小认识

    C#读写文本文件一般都是用StreamWriter来实现(读书的时候就这样用.毕业后这几年基本也是这样干的),通常代码例如以下: using (StreamWriter sw = new Stream ...

  4. Sqlserver2008 FileStream解决图片存储问题

    Sqlserver2008 FileStream解决图片存储问题 参考文章: (1)Sqlserver2008 FileStream解决图片存储问题 (2)https://www.cnblogs.co ...

  5. FileStream 和StreamWriter 一起用时

    StreamWriter  Flush 即可. FileStream Flush 无用. 转载于:https://www.cnblogs.com/runliuv/p/3173454.html

  6. .NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead

    本文首发在IT168 写这个系列原本的想法是讨论一下.NET中异步编程风格的变化,特别是F#中的异步工作流以及未来的.NET 5.0中的基于任务的异步编程模型.但经过三篇文章后很多人对IO异步背后实现 ...

  7. c#FileStream文件读写(转)

    /C#文件流写文件,默认追加FileMode.Append              string msg = "okffffffffffffffff";             ...

  8. FileStream实现多线程断点续传(已封装)

    处理文件分片 处理缺失的分片文件 合并分片文件 MD5验证文件 using System; using System.Collections.Generic; using System.IO; usi ...

  9. 在SharePoint 2010系统中安装RBS FILESTREAM Provider

    在SharePoint 2010系统中安装RBS FILESTREAM Provider 这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL ...

  10. Winform中使用FileStream读取文件后,继续操作提示:it is being used by anothor process

    场景 使用Winform搭建FTP客户端之后,读取本地某路径下的文件,然后将文件读取进行上传,再删除,在进行删除时提示: System.IO.IOException:The process cannn ...

最新文章

  1. Python内置函数(57)——setattr
  2. web前端——让人头疼的多列复选框排列解决办法
  3. Vue-使用webpack+vue-cli搭建项目
  4. 一文纵览EMAS 到底内含多少阿里核心技术能力
  5. python中isinstance(3、object)_python中isinstance函数判断各种类型的小细节
  6. menu什么意思中文意思_alternate什么意思
  7. Struts2简单入门实例
  8. WPF--常用布局介绍
  9. Redis数据类型之字符串String
  10. 换个服务器后网页加载很慢,打开网页很缓慢?换个DNS轻松解决问题
  11. Apache虚拟主机的实现方式
  12. 全球500强的网站只有500个!强者生存!
  13. windows中docker 安装和使用
  14. LYZ-Ice Skates
  15. 3D目标检测——代码理解——Second代码:数据处理kitti_dataset.py的理解
  16. KVM虚拟机快速入门
  17. python中安装gensim包
  18. 正在从你的计算机中删除office,手动删除Office 2013或Office 365即点即用安装的步骤...
  19. 一文告诉你什么叫边缘计算
  20. QT 中改变文字颜色 字体 形状

热门文章

  1. 更开放的分布式事务 | Fescar 品牌升级,更名为 Seata
  2. phinx数据库脚本迁移工具
  3. iOS ReactiveCocoa 最全常用API整理
  4. 让解析器可以快速处理词法单元之间的空格
  5. 国内交通产业进入新纪元 智能加码功不可没
  6. Oracle中函数/过程返回结果集的几种方式
  7. CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
  8. 根据osdid 查询磁盘是ssd盘还是sas盘
  9. build_doxygen_报找不到iconv.....
  10. Qt 发布 Android 自动驾驶技术预览