码迷,mamicode.com
首页 > Windows程序 > 详细

C#基础-FileStream

时间:2016-07-30 22:20:45      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:

一、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 }

 

C#基础-FileStream

标签:

原文地址:http://www.cnblogs.com/lovecsharp094/p/5721839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!