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的异步操作
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Threading; namespace StreamWin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string filePaths = @"E:\Test\Test\local\a.txt"; string fileName ="a.txt" ; System.IO.FileInfo f = new FileInfo(@"E:\Test\Test\server\a.txt"); int fileLength = Convert.ToInt32(f.Length.ToString()); ThreadPool.SetMaxThreads(100, 100); using (System.IO.FileStream stream = new System.IO.FileStream(filePaths, FileMode.Create,FileAccess.Write, FileShare.Write, 1024, true)) { for (int i = 0; i < fileLength; i +=100 * 1024) { int length = (int)Math.Min(100 * 1024, fileLength - i); var bytes = GetFile(fileName, i, length); stream.BeginWrite(bytes, 0, length, new AsyncCallback(Callback), stream); } stream.Flush(); } } public static byte[] GetFile(string name, int start, int length) { string filepath = @"E:\Test\Test\server\a.txt"; using (System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite,1024,true)) { byte[] buffer = new byte[length]; fs.Position = start; fs.BeginRead(buffer, 0, length,new AsyncCallback(Completed),fs); return buffer; } } static void Completed(IAsyncResult result) { FileStream fs = (FileStream)result.AsyncState; fs.EndRead(result); fs.Close(); } public static void Callback(IAsyncResult result) { FileStream stream = (FileStream)result.AsyncState; stream.EndWrite(result); stream.Close(); } } }
栏 目:C#教程
下一篇:C#装箱和拆箱操作实例分析
本文标题:C#基础知识之FileStream
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6317.html
您可能感兴趣的文章
- 01-10C#一个简单的定时小程序实现代码
- 01-10微信开放平台之网站授权微信登录功能
- 01-10C#编程自学之数据类型和变量二
- 01-10C#编程自学之开篇介绍
- 01-10C#编程自学之数据类型和变量三
- 01-10C#编程自学之运算符和表达式
- 01-10C#编程自学之类和对象
- 01-10C#编程自学之数据类型和变量一
- 01-10C#编程自学之流程控制语句
- 01-10C#基于委托实现多线程之间操作的方法
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11ajax实现页面的局部加载
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05dedecms(织梦)副栏目数量限制代码修改