首页 > 编程 > C# > 正文

C#基础知识之FileStream

2020-01-24 01:02:08
字体:
来源:转载
供稿:网友

一、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();    }  }}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表