C#中文件流对象表示在磁盘或网络路径上指向文件的流。可以使用文件流类对文件系统上的文件进行读取、写入、打开、关闭等。下面我们就来详细探讨下
一、FileStream的基础知识
属性:
CanRead判断当前流是否支持读取,返回弯曲件值,真的表示可以读取
CanWrite判断当前流是否支持写入,返回弯曲件值,真的表示可以写入
方法:
阅读()从流中读取数据,返回字节数组
写()将字节块(字节数组)写入该流
Seek()设置文件读取或写入的起始位置
齐平()清除该流缓冲区,使得所有缓冲的数据都被写入到文件中
关闭()关闭当前流并释放与之相关联的所有系统资源
文件的访问方式:(文件访问)
文件访问。阅读(对文件读访问)
文件访问。写(对文件进行写操作)
文件访问。读写(对文件读或写操作)
文件打开模式:(文件模式)包括6个枚举
文件模式.附加打开现有文件准备向文件追加数据,只能同文件访问。写一起使用
文件模式.创造指示操作系统应创建新文件,如果文件已经存在,它将被覆盖
文件模式.新建指示操作系统应创建新文件,如果文件已经存在,将引发异常
文件模式.打开指示操作系统应打开现有文件,打开的能力取决于文件访问所指定的值
文件模式.OpenOrCreate指示操作系统应打开文件,如果文件不存在则创建新文件
文件模式.缩短指示操作系统应打开现有文件,并且清空文件内容
文件共享方式:(文件共享)
文件共享方式是为了避免几个程序同时访问同一个文件会造成异常的情况。
文件共享方式包括四个:
文件共享。没有人谢绝共享当前文件
文件共享。阅读充许别的程序读取当前文件
文件共享。写充许别的程序写当前文件
文件共享。读写充许别的程序读写当前文
二、文件流的异步操作
使用系统;
使用系统。集合。泛型;
使用系统。组件模型;
使用系统。数据;
使用系统。绘图;
使用系统100 . Linq
使用系统。文本;
使用系统。线程。任务;
使用系统窗户。形式
使用系统。木卫一;
使用系统。穿线;
命名空间斯特朗温
{
公共分部类表单1:表单
{
公共表单1()
{
初始化组件();
}
私有void button1_Click(对象发送方,EventArgs e)
{
字符串文件路径=@ ' E:\ Test \ Test \ local \ a . txt ';
string fileName=' a.txt
系统10 . IO。FileInfo f=new FileInfo(@ ' E:\ Test \ Test \ server \ a . txt ');
int fileLength=Convert .长度为32英尺。tostring());
线程池SetMaxThreads(100,100);
使用(系统。文件流流=新系统10 . IO。文件流(文件路径,文件模式。创建,文件访问。写,文件共享。写,1024,真))
{
for(int I=0;我文件长度;i=100 * 1024)
{
int length=(int)数学. Min(100 * 1024,文件长度-I);
var bytes=GetFile(文件名,我,长度);
溪流BeginWrite(bytes,0,length,new AsyncCallback(回调),流);
}
溪流flush();
}
}
公共静态字节[] GetFile(字符串名int开始,int长度)
{
字符串文件路径=@ ' E:\ Test \ Test \ server \ a . txt ';
使用(系统FileStream fs=新系统10 . IO。文件流(文件路径,系统10 . IO。打开,系统.IO。文件访问.读取,文件共享.ReadWrite,1024,true))
{
字节[]缓冲区=新字节[长度];
fs .位置=开始;
fs .BeginRead(buffer,0,length,new AsyncCallback(已完成),fs);
返回缓冲区;
}
}
静态空的已完成(IAsyncResult结果)
{
文件流fs=(文件流)结果。异步状态;
fs .结束读取(结果);
fs .close();
}
公共静态空的回调(IAsyncResult结果)
{
文件流流=(文件流)结果。异步状态;
溪流EndWrite(结果);
溪流. close();
}
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。