1、Stream
什么是stream?(https://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html#no8)html
定义:提供字节序列的通常视图。缓存
什么是字节序列?
定义:字节按照必定的顺序进行排序组成了字节序列,字节对象都被存储为连续的字节序列。
一个字节由8个二进制组成。异步
stream类的结构,属性和方法
构造函数:
stream类由一个protected类型的构造函数,可是它是个抽象类,没法直接以下使用
Stream stream = new Stream();
因此咱们自定义一个流继承自Stream看看那些属性必须重写或者自定义:函数
1.CanRead:只读属性,判断该流是否可以读取;
2.CanSeek:只读属性,判断该流是否支持跟踪查找;
3.CanWrite:只读属性,判断当前流是否可写;
4.Void Flush():当咱们使用流写文件时,数据流会先进入到缓冲区中,而不会马上写入文件,当执行这个方法后,缓冲区的数据流会当即注入基础流。(使用此方法能够将全部信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这种操做。
当使用StreamWrite或者BinaryWrite类时,不要刷新Stream基对象而应该使用该类的Flush或Close方法,此方法确保首先将该数据刷新至基础流,而后再将其写入文件。
5.Length:表示流的长度
6.Position属性:虽然从字面中能够看出这个Position属性只是标示了流中的一个位置,当Stream对象被缓存了,会致使Position属性在流中没法找到正确的位置,解决方案:用Using语句将流对象包裹起来,用完以后关闭回收便可。(using()语句会自动回收)编码
2、File
提供用于建立、复制、删除、移动和打开单一文件的静态方法,并协助建立 FileStream 对象。
继承 Object->File
方法:
AppendAllLines(String Filepath, IEnumerable<String> content) FilePath: 须要追加内容的文件 content:须要追加的行File.AppendAllText(String filepath,String content,Encoding) 将指定的字符串追加到文件中,若是文件还不存在则建立该文件encoding 字符编码
public static System.IO.StreamWriter AppendText (string path);返回StreamWriter一个流写入器,它将 UTF-8 编码文本追加到指定文件或新文件。 建立一个StreamWriter,它将 UTF-8 编码文本追加到现有文件或新文件(若是指定文件不存在)
public static void Copy (string sourceFileName, string destFileName);sourceFileName 要复制的文件。destFileName 目标文件的名称,它不能是一个目录或现有文件.
public static System.IO.FileStream Create (string path);//path要建立的文件的路径及名称。返回一个FileStream,它提供对 path 中指定的文件的读/写访问。操作系统
eg. orm
using (FileStream fs = File.Create(path))
{
Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
// Add some information to the file.
fs.Write(info, 0, info.Length);
}htm
public static System.IO.FileStream Create (string path, int bufferSize);//path要建立的文件的路径及名称 bufferSize Int32用于读取和写入到文件的已放入缓冲区的字节数。返回FileStream一个具备指定缓冲区大小的 FileStream,它提供对 path 中指定的文件的读/写访问。
public static System.IO.FileStream OpenRead (string path);//打开文件进行读取,返回FileStream指定路径上的只读FileStream。
public static void Move (string sourceFileName, string destFileName);//文件移动,从sourceFileName移动到destFileName
3、FileStream
为文件提供stream,既支持同步读写又支持异步读写。是对文件的操做,继承自Stream。
方法:
public FileStream(string path, FileMode mode, FileAccess access);
path指明文件所在的路径信息;
mode是FileMode的枚举值,表示文件打开或建立的方式
CreateNew:指定操做系统应建立新文件,若是文件已经存在,则引起IOException;
Create:指定操做系统应建立新文件,若是文件已经存在,它将被覆盖;
Open:指定操做系统应打开现有文件,若是文件不存在,则引起FileNotFoundException;
OpenOrCreate:指定操做系统应打开文件,若是文件不存在,则建立新文件;
Truncate:指定操做系统应打开现有文件,文件一旦打开,就将截断为零字节大小;
Append:打开先有文件并把Position设置至文件尾,若是文件不存在将建立新文件。Append只能同FileAccess.Write一块儿使用对象
access是FileAccess的枚举值,它控制对文件的访问权限
Read:打开文件用于只读;
Write:打开文件用于只写;
ReadWrite:打开文件,用于读写;
//建立新文件
FileStream fileStream = new FileStream(@"d:\test.txt", FileMode.Create);
//读取
FileStream fileStream= new FileStream(@"d:\test.txt", FileMode.Open);
FileStream fs=File.OpenRead(@"c:\file.txt"); //这样是返回只读文件流。
4、MemoryStream
和文件流不一样,MemoryStream类表示的是保存在内存中的数据流,由内存流封装的数据能够在内存中直接访问。内存通常用于暂时缓存数据以下降应用程序对临时缓冲区和临时文件的须要。
相关用法:blog
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[stream.Length];
stream.Position = 0;
int arrbyte = stream.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, arrbyte);
FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(FilePath), FileMode.Create);
//写入流文件
ms.WriteTo(fs);
//清空内存 ms.Close(); fs.Close(); fs = null; ms = null;