[转载]FileStream读写文件
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 为读/写访问
- public override int Read(byte[] array, int offset, int count);
- public override void Write(byte[] array, int offset, int count);
- Dispose():释放由 Stream 使用的所有资源
- Close()关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。
(3)实例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream类的命名空间 namespace Filestream读写文件
{
class Program
{
static void Main(string[] args)
{
//FileStream 操作字节的
//1.创建FileStream类对象
FileStream fsread = new FileStream(@"F:\C#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read);
byte[] buffer=new byte[1024*1024*2]; //定义一个2M的字节数组
//返回本次实际读取到的有效字节数
int r=fsread.Read(buffer,0,buffer.Length); //每次读取2M放到字节数组里面
//将字节数组中每一个元素按照指定的编码格式解码成字符串
string s=Encoding.Default.GetString(buffer,0,r);
//关闭流
fsread.Close();
//释放流所占用的资源
fsread.Dispose();
Console.WriteLine(s); //打印读取到的内容
Console.ReadKey();
}
}
}
结果为:
(4)将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。
(将数据写入文件)代码为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream类的命名空间 namespace Filestream读写文件
{
class Program
{
static void Main(string[] args)
{
//将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
using (FileStream fsWrite = new FileStream(@"F:\C#projects\abc.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
string str="看数据会不会被覆盖掉";
byte[] buffer=Encoding.Default.GetBytes(str);
fsWrite.Write(buffer, 0, buffer.Length);
}
Console.WriteLine("写入完成...");
Console.ReadKey();
}
}
}
运行结果为:
(5)实现多媒体文件的复制
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream类的命名空间 namespace 多媒体文件复制
{
class Program
{
static void Main(string[] args)
{
//思路:就是先将要复制的多媒体文件读取出来,然后再写入到指定的地方
string s_path = @"C:\Users\mei\Desktop\1、复习.avi"; //要读取的文件路径(文件有58.3M)
string d_path = @"C:\Users\mei\Desktop\new.avi"; //存放的路径
CopyFile(s_path, d_path);
Console.WriteLine("复制完成...");
Console.ReadKey(); }
public static void CopyFile(string source,string target) //自定义文件复制函数
{
//创建负责读取的流
using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
{
//创建一个负责写入的流
using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer=new byte[1024*1024*5]; //声明一个5M大小的字节数组
//因为文件有58.3M,要循环读取
while(true)
{
int r=fsread.Read(buffer, 0, buffer.Length); //返回本次实际读取到的字节数
//如果返回一个0时,也就意味着什么都没有读到,读取完了
if(r==0)
break;
fswrite.Write(buffer,0,r); }
} }
}
}
}
运行结果:
2、StreamReader类和StreamWriter类
(1)StreamReader 类
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
构造函数:
- StreamReader(Stream, Encoding):用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。
属性:
- EndOfStream:获取一个值,该值指示当前的流位置是否在流结尾。
方法:
- ReadLine():从当前流中读取一行字符并将数据作为字符串返回。(覆盖 TextReader.ReadLine()。)
实例1--使用StreamReader 类读取一个文本文件
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StreamReader类和StreamWriter类
{
class Program
{
static void Main(string[] args)
{
//使用StreamReader来读取一个文本文件
using (StreamReader sr = new StreamReader(@"F:\C#projects\abc.txt",Encoding.Default))
{
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine()); //读取一行之后,在控制台打印输出
}
}
Console.ReadKey();
}
}
}
运行结果:
(2)StreamWriter类
实现 TextWriter 用于将字符写入到流中特定的编码。
构造函数:
- StreamWriter(Stream):新实例初始化 StreamWriter 类为使用 utf-8 编码及默认的缓冲区大小指定的流。
- StreamWriter(Stream, Encoding):新实例初始化 StreamWriter 为通过使用指定的编码及默认的缓冲区大小指定的流的类。
- StreamWriter(String, Boolean):新实例初始化 StreamWriter 类为指定的文件使用默认的编码和缓冲区大小。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。
方法:
- Write(String):将字符串写入流。(覆盖 TextWriter.Write(String)。)
实例---使用StreamWriter类向文件中写入内容
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StreamReader类和StreamWriter类
{
class Program
{
static void Main(string[] args)
{
//使用StreamWriter来写入一个文本文件,解决乱码使用:System.Text.Encoding.Default
using (StreamWriter st = new StreamWriter(@"F:\C#projects\abc.txt",true,System.Text.Encoding.Default))
{
st.Write("非常好用的类1");
}
Console.WriteLine("写入完成...");
Console.ReadKey();
}
}
}
结果:
[转载]FileStream读写文件的更多相关文章
- FileStream读写文件流
		用FileStream 读取文件流并显示给文件内容 string p = @"C:\Users\Administrator\Desktop\1.txt"; FileStream f ... 
- FileStream读写文件【StreamWriter 和 StreamReader】
		FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类 ... 
- FileStream读写文件
		读文件示例 try { // 打开文件 FileStream fs = new FileStream("D:\\not.txt", FileMode.Open, FileAcces ... 
- C#读写文件总结
		1.使用FileStream读写文件 文件头: using System; using System.Collections.Generic; using System.Text; using ... 
- C# 之 读写文件
		1.使用 FileStream 读写文件 添加命名空间引用: using System; using System.Collections.Generic; using System.Text; us ... 
- BufferedReader和BufferedWriter读写文件(转载)
		http://375940084.blog.51cto.com/2581965/751040 1.创建Student类存储每个学生信息,属性(学号,姓名,出生日期,得分)2.从c:/test/stud ... 
- c# 高效读写文件
		一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ... 
- C#常用IO流与读写文件
		.文件系统 ()文件系统类的介绍 文件操作类大都在System.IO命名空间里.FileSystemInfo类是任何文件系统类的基类:FileInfo与File表示文件系统中的文件:Directory ... 
- Android 怎样在linux kernel 中读写文件
		前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ... 
随机推荐
- [NOSQL] Redis介绍
			Redis概述 Redis是Salvatore Sanfilippo在2009年为其初创公司LLOOGG开发的,眼下仍是独立项目.但VMWare赞劣了项目(作者是其雇员).它採用C语言实现.因此性能非 ... 
- SQL Server的等待事件
			具体查看: https://www.sqlshack.com/sql-server-wait-types/ 早上10:00, 公司的订单数据更新缓慢,查看了监控的sql信息,有大量的HADR_SYNC ... 
- 鼠标 DPI与CPI
			何为dpi: dpi英文全称是“dots per inch”,直译为“每英寸像素”,意思是每英寸的像素数.(1 英寸=2.54cm),是指鼠标内的解码装置所能辨认每英寸长度内像素数.(屏幕上最小单位是 ... 
- C语言数据类型运算法则
			整形与整形运算得到的还是整形 printf("%d\n",1/3); //0 printf("%d\n",1+2); //3 整形与浮点型运算得到浮点型数据 p ... 
- solr整合spring
			<!-- 单机版solr服务配置 --> <!-- <bean id="httpSolrServer" class="org.apache.sol ... 
- Java Selenium - 浏览器操作
			浏览器主要操作方法来自接口 org.openqa.selenium.WebDriver , 实现于org.openqa.selenium.remote.RemoteWebDriver这个类,然后不同浏 ... 
- WINDOWS SERVER 2008远程桌面端口修改方法
			微软默认的服务器远程端口是3389,这是被很多黑客利用的端口,如何修改掉了,下面我们来说方法很多朋友在使用WINDOWS操作系统的时候,都喜欢修改远程连接的默认端口.但是很多朋友由于修改端口的方法错误 ... 
- Go vs Erlang - 转
			From http://zhang.hu/go-vs-erlang/ Go vs Erlang 因为 云巴 系统对高并发.低延迟的需求,我们对各个语言.平台做了很多的调研比较工作.这自然就包括致力于开 ... 
- vue打包后404,webpack配置问题
			首先声明这是基于vue2.x的 1. 将其中build的配置项assetsPublicPath进行修改,改为上图-->目的是将资源文件的引入路径,改为相对地址(相对index.html) 2.h ... 
- 开源unittest测试报告源码BSTestRunner.py
			开源BSTestRunner 生成HTML测试报告源码: 保存代码到BSTestRunner.py 配合Unittest使用,很完美. python2: """ A Te ... 
