FileStream读写文件

FileStream类:操作字节的,可以操作任何的文件

StreamReader类和StreamWriter类:操作字符的,只能操作文本文件。

1、FileStream类

FileStream类

命名空间:   System.IO

(1)构造函数:

  • FileStream(String, FileMode):使用指定的路径和创建模式初始化FileStream 类的新实例。
  • FileStream(String, FileMode, FileAccess):使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。

FileMode 枚举:

  • Append

如果它存在,并且查找到该文件的末尾,或者创建一个新文件,请打开该文件。 这要求 FileIOPermissionAccess.Append 权限。 FileMode.Append 可以仅在结合使用 FileAccess.Write。 尝试查找该文件将引发结束之前将其置于 IOException 异常,并且任何尝试读取失败,将引发 NotSupportedException 异常。

  • Create

指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它。 这要求 FileIOPermissionAccess.Write 权限。 FileMode.Create 等效于请求,如果该文件不存在,则使用 CreateNew; 否则为使用 Truncate。 如果该文件已存在但为隐藏的文件, UnauthorizedAccessException 则会引发异常。

  • CreateNew

指定操作系统应创建一个新的文件。 这要求 FileIOPermissionAccess.Write 权限。 如果该文件已存在, IOException 则会引发异常。

  • Open

指定操作系统应打开现有文件。 若要打开该文件的能力是依赖于指定的值 FileAccess 枚举。 一个 System.IO.FileNotFoundException 如果文件不存在将引发异常。

  • OpenOrCreate

指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件。 如果使用打开该文件 FileAccess.Read,FileIOPermissionAccess.Read 权限是必需的。 如果文件访问是 FileAccess.Write,FileIOPermissionAccess.Write 权限是必需的。 如果使用打开该文件 FileAccess.ReadWrite,这两个 FileIOPermissionAccess.Read 和 FileIOPermissionAccess.Write 权限是必需的。

  • Truncate

指定操作系统应打开现有文件。 当打开文件时,应被截断,以便其大小为零字节。 这要求 FileIOPermissionAccess.Write 权限。 尝试从文件中读取使用打开 FileMode.Truncate 导致 ArgumentException 异常。

FileAccess 枚举:

  • Read:对文件的读取访问权限。 可以从文件读取数据。 将与结合起来 Write 为读/写访问。
  • ReadWrite:读取和写入到文件的访问。 可以写入和从文件中读取数据。
  • Write:对文件的写入访问权限。 数据可以写入该文件。 将与结合起来 Read 为读/写访问
(2)方法
  • public override int Read(byte[] array, int offset, int count);
  • public override void Write(byte[] array, int offset, int count);
  • Dispose():释放由 Stream 使用的所有资源
  • Close()关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。

(3)实例代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;    //FileStream类的命名空间
  6.  
  7. namespace Filestream读写文件
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             //FileStream 操作字节的
  14.             //1.创建FileStream类对象
  15.             FileStream fsread = new FileStream(@"F:\C#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read);
  16.             byte[] buffer=new byte[1024*1024*2];    //定义一个2M的字节数组
  17.             //返回本次实际读取到的有效字节数
  18.             int r=fsread.Read(buffer,0,buffer.Length);    //每次读取2M放到字节数组里面
  19.             //将字节数组中每一个元素按照指定的编码格式解码成字符串
  20.             string s=Encoding.Default.GetString(buffer,0,r);
  21.             //关闭流
  22.             fsread.Close();
  23.             //释放流所占用的资源
  24.             fsread.Dispose();
  25.             Console.WriteLine(s);  //打印读取到的内容
  26.             Console.ReadKey();
  27.         }
  28.     }
  29. }

结果为:

(4)将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

(将数据写入文件)代码为:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;    //FileStream类的命名空间
  6.  
  7. namespace Filestream读写文件
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             
  14.             //将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
  15.             using (FileStream fsWrite = new FileStream(@"F:\C#projects\abc.txt", FileMode.OpenOrCreate, FileAccess.Write))
  16.             {
  17.                 string str="看数据会不会被覆盖掉";
  18.                 byte[] buffer=Encoding.Default.GetBytes(str);
  19.                 fsWrite.Write(buffer, 0, buffer.Length);
  20.             }
  21.             Console.WriteLine("写入完成...");
  22.             Console.ReadKey();
  23.         }
  24.     }
  25. }

运行结果为:

(5)实现多媒体文件的复制

代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;    //FileStream类的命名空间
  6.  
  7. namespace 多媒体文件复制
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             //思路:就是先将要复制的多媒体文件读取出来,然后再写入到指定的地方
  14.             string s_path = @"C:\Users\mei\Desktop\1、复习.avi";   //要读取的文件路径(文件有58.3M)
  15.             string d_path = @"C:\Users\mei\Desktop\new.avi";     //存放的路径
  16.             CopyFile(s_path, d_path);
  17.             Console.WriteLine("复制完成...");
  18.             Console.ReadKey();
  19.  
  20.         }
  21.         public static void CopyFile(string source,string target)    //自定义文件复制函数
  22.         {
  23.             //创建负责读取的流
  24.             using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
  25.             {
  26.                 //创建一个负责写入的流
  27.                 using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
  28.                 {
  29.                     byte[] buffer=new byte[1024*1024*5];    //声明一个5M大小的字节数组
  30.                     //因为文件有58.3M,要循环读取
  31.                     while(true)
  32.                     {
  33.                         int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
  34.                         //如果返回一个0时,也就意味着什么都没有读到,读取完了
  35.                         if(r==0)
  36.                             break;
  37.                         fswrite.Write(buffer,0,r);
  38.  
  39.                     }
  40.                     
  41.                }
  42.  
  43.             }
  44.         }
  45.     }
  46. }

运行结果:

2、StreamReader类和StreamWriter类

(1)StreamReader 类

实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

构造函数:

  • StreamReader(Stream, Encoding):用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。

属性:

  • EndOfStream:获取一个值,该值指示当前的流位置是否在流结尾。

方法:

  • ReadLine():从当前流中读取一行字符并将数据作为字符串返回。(覆盖 TextReader.ReadLine()。)

实例1--使用StreamReader 类读取一个文本文件

代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace StreamReader类和StreamWriter
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //使用StreamReader来读取一个文本文件
  13.             using (StreamReader sr = new StreamReader(@"F:\C#projects\abc.txt",Encoding.Default))
  14.             {
  15.                 while (!sr.EndOfStream)
  16.                 {
  17.                     Console.WriteLine(sr.ReadLine()); //读取一行之后,在控制台打印输出
  18.                 }
  19.                 
  20.             }
  21.             Console.ReadKey();
  22.         }
  23.     }
  24. }

运行结果:

(2)StreamWriter类

实现 TextWriter 用于将字符写入到流中特定的编码。

构造函数:

  • StreamWriter(Stream):新实例初始化 StreamWriter 类为使用 utf-8 编码及默认的缓冲区大小指定的流。
  • StreamWriter(Stream, Encoding):新实例初始化 StreamWriter 为通过使用指定的编码及默认的缓冲区大小指定的流的类。
  • StreamWriter(String, Boolean):新实例初始化 StreamWriter 类为指定的文件使用默认的编码和缓冲区大小。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。

方法:

  • Write(String):将字符串写入流。(覆盖 TextWriter.Write(String)。)

实例---使用StreamWriter类向文件中写入内容

代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace StreamReader类和StreamWriter
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.            
  13.             //使用StreamWriter来写入一个文本文件,解决乱码使用:System.Text.Encoding.Default
  14.             using (StreamWriter st = new StreamWriter(@"F:\C#projects\abc.txt",true,System.Text.Encoding.Default))
  15.             {
  16.                 
  17.                    st.Write("非常好用的类1");
  18.             }
  19.             Console.WriteLine("写入完成...");
  20.             Console.ReadKey();
  21.         }
  22.     }
  23. }

结果:

[转载]FileStream读写文件的更多相关文章

  1. FileStream读写文件流

    用FileStream 读取文件流并显示给文件内容 string p = @"C:\Users\Administrator\Desktop\1.txt"; FileStream f ...

  2. FileStream读写文件【StreamWriter 和 StreamReader】

    FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类 ...

  3. FileStream读写文件

    读文件示例 try { // 打开文件 FileStream fs = new FileStream("D:\\not.txt", FileMode.Open, FileAcces ...

  4. C#读写文件总结

    1.使用FileStream读写文件   文件头:   using System; using System.Collections.Generic; using System.Text; using ...

  5. C# 之 读写文件

    1.使用 FileStream 读写文件 添加命名空间引用: using System; using System.Collections.Generic; using System.Text; us ...

  6. BufferedReader和BufferedWriter读写文件(转载)

    http://375940084.blog.51cto.com/2581965/751040 1.创建Student类存储每个学生信息,属性(学号,姓名,出生日期,得分)2.从c:/test/stud ...

  7. c# 高效读写文件

    一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...

  8. C#常用IO流与读写文件

    .文件系统 ()文件系统类的介绍 文件操作类大都在System.IO命名空间里.FileSystemInfo类是任何文件系统类的基类:FileInfo与File表示文件系统中的文件:Directory ...

  9. Android 怎样在linux kernel 中读写文件

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

随机推荐

  1. Hibernate三种状态,缓存,以及update更新问题

    一. Hibernate中对象的三种状态 1. 瞬时状态(transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,此时该对象只是通过JVM获得了一块 ...

  2. MySQL 8.0.11 报错[ERROR] [MY-011087] Different lower_case_table_names settings for server ('1')

    --报错信息: 2018-06-07T19:52:26.943083+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld ...

  3. Python基础-编码与解码

      一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的 ...

  4. input debounce

    项目背景是一个搜索框,不能实时的监听onChange 事件去发送请求,这样会造成服务器的压力 解决思路就是用 setTimeout + clearTimeout 普通js代码如下: / 下面是普通的j ...

  5. javascript篇-浅拷贝与深拷贝

    理解javascript 的浅拷贝与深拷贝,首先看一下js的数据类型: js有5种基本数据类型:undefined,null,boolean,number,string 还有一种复杂的数据类型(也叫引 ...

  6. iframe子父窗口相互操作方法或元素

    一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...

  7. 实例:使用puppeteer headless方式抓取JS网页

    puppeteer google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的动态内容,如JavaScript,能够更 ...

  8. tp5Auth权限实现

    原文地址:https://blog.csdn.net/qq_33257081/article/details/79137190 下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.ph ...

  9. Centos7限速和测速

    限速 wondershaper是国外人开发的一款在Linux内核下基于TC工具的对整块网卡的限度工具. 第一种安装方法 首先下载wondershaper的rpm安装包:wondershaper-1.1 ...

  10. gluster 卷的类型及创建方法

    基本卷: 分布式卷 文件随机分布在brick中,提升读写性能 不提供数据冗余,最大化利用磁盘空间 # gluster volume create test-volume server1:/exp1 s ...