C#基础知识之FileStream
一、FileStream的基础知识
属性:
CanRead判断当前流是否支持读取,返回bool值,True表示可以读取
CanWrite判断当前流是否支持写入,返回bool值,True表示可以写入
方法:
Read()从流中读取数据,返回字节数组
Write()将字节块(字节数组)写入该流
Seek()设置文件读取或写入的起始位置
Flush()清除该流缓冲区,使得所有缓冲的数据都被写入到文件中
Close()关闭当前流并释放与之相关联的所有系统资源
文件的访问方式:(FileAccess)
FileAccess.Read(对文件读访问)
FileAccess.Write(对文件进行写操作)
FileAccess.ReadWrite(对文件读或写操作)
文件打开模式:(FileMode)包括6个枚举
FileMode.Append打开现有文件准备向文件追加数据,只能同FileAccess.Write一起使用
FileMode.Create指示操作系统应创建新文件,如果文件已经存在,它将被覆盖
FileMode.CreateNew指示操作系统应创建新文件,如果文件已经存在,将引发异常
FileMode.Open指示操作系统应打开现有文件,打开的能力取决于FileAccess所指定的值
FileMode.OpenOrCreate指示操作系统应打开文件,如果文件不存在则创建新文件
FileMode.Truncate指示操作系统应打开现有文件,并且清空文件内容
文件共享方式:(FileShare)
FileShare方式是为了避免几个程序同时访问同一个文件会造成异常的情况。
文件共享方式包括四个:
FileShare.None谢绝共享当前文件
FileShare.Read充许别的程序读取当前文件
FileShare.Write充许别的程序写当前文件
FileShare.ReadWrite充许别的程序读写当前文
二、FileStream的异步操作
usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Windows.Forms; usingSystem.IO; usingSystem.Threading; namespaceStreamWin { publicpartialclassForm1:Form { publicForm1() { InitializeComponent(); } privatevoidbutton1_Click(objectsender,EventArgse) { stringfilePaths=@"E:\Test\Test\local\a.txt"; stringfileName="a.txt"; System.IO.FileInfof=newFileInfo(@"E:\Test\Test\server\a.txt"); intfileLength=Convert.ToInt32(f.Length.ToString()); ThreadPool.SetMaxThreads(100,100); using(System.IO.FileStreamstream=newSystem.IO.FileStream(filePaths,FileMode.Create,FileAccess.Write,FileShare.Write,1024,true)) { for(inti=0;i<fileLength;i+=100*1024) { intlength=(int)Math.Min(100*1024,fileLength-i); varbytes=GetFile(fileName,i,length); stream.BeginWrite(bytes,0,length,newAsyncCallback(Callback),stream); } stream.Flush(); } } publicstaticbyte[]GetFile(stringname,intstart,intlength) { stringfilepath=@"E:\Test\Test\server\a.txt"; using(System.IO.FileStreamfs=newSystem.IO.FileStream(filepath,System.IO.FileMode.Open,System.IO.FileAccess.Read,FileShare.ReadWrite,1024,true)) { byte[]buffer=newbyte[length]; fs.Position=start; fs.BeginRead(buffer,0,length,newAsyncCallback(Completed),fs); returnbuffer; } } staticvoidCompleted(IAsyncResultresult) { FileStreamfs=(FileStream)result.AsyncState; fs.EndRead(result); fs.Close(); } publicstaticvoidCallback(IAsyncResultresult) { FileStreamstream=(FileStream)result.AsyncState; stream.EndWrite(result); stream.Close(); } } }