标签:
一、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的异步操作
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 using System.IO; 11 using System.Threading; 12 13 namespace StreamWin 14 { 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 private void button1_Click(object sender, EventArgs e) 23 { 24 string filePaths = @"E:\Test\Test\local\a.txt"; 25 string fileName ="a.txt" ; 26 27 System.IO.FileInfo f = new FileInfo(@"E:\Test\Test\server\a.txt"); 28 int fileLength = Convert.ToInt32(f.Length.ToString()); 29 30 ThreadPool.SetMaxThreads(100, 100); 31 using (System.IO.FileStream stream = new System.IO.FileStream(filePaths, FileMode.Create,FileAccess.Write, FileShare.Write, 1024, true)) 32 { 33 for (int i = 0; i < fileLength; i +=100 * 1024) 34 { 35 int length = (int)Math.Min(100 * 1024, fileLength - i); 36 var bytes = GetFile(fileName, i, length); 37 stream.BeginWrite(bytes, 0, length, new AsyncCallback(Callback), stream); 38 } 39 stream.Flush(); 40 } 41 } 42 43 public static byte[] GetFile(string name, int start, int length) 44 { 45 string filepath = @"E:\Test\Test\server\a.txt"; 46 using (System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite,1024,true)) 47 { 48 byte[] buffer = new byte[length]; 49 fs.Position = start; 50 fs.BeginRead(buffer, 0, length,new AsyncCallback(Completed),fs); 51 return buffer; 52 } 53 } 54 55 static void Completed(IAsyncResult result) 56 { 57 FileStream fs = (FileStream)result.AsyncState; 58 fs.EndRead(result); 59 fs.Close(); 60 } 61 public static void Callback(IAsyncResult result) 62 { 63 FileStream stream = (FileStream)result.AsyncState; 64 stream.EndWrite(result); 65 stream.Close(); 66 } 67 } 68 }
标签:
原文地址:http://www.cnblogs.com/lovecsharp094/p/5721839.html