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

相关推荐

  • C#流类FileStream学习使用笔记

    static void Main(string[] args) { //创建FileStream对象需要指定 文件名,打开模式,访问模式,共享模式 //1.调用本身的构造函数创建流 FileStream fs1 = new FileStream(@"F:\1.txt", FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite); //2.利用File类或者FileInfo类的Open方法 //FileStream fs2 = Fi

  • C# FileStream文件读写详解

    FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据.字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行,稍后对此进行介绍. 还有几种方法可以创建FileStream对象.构造函数具有许多不同的重载版本,最简单的构造函数仅仅带有两个参

  • C#使用FileStream循环读取大文件数据的方法示例

    本文实例讲述了C#使用FileStream循环读取大文件数据的方法.分享给大家供大家参考,具体如下: 今天学习了FileStream的用法,用来读取文件流,教程上都是读取小文件,一次性读取,但是如果遇到大文件,那么我们就需要循环读取文件. 直接上代码. 引用命名空间 using System.IO; 下面就是循环读取大文件的代码 class Program { static void Main(string[] args) { //循环读取大文本文件 FileStream fsRead; //获

  • C#使用文件流读取文件的方法

    本文实例讲述了C#使用文件流读取文件的方法.分享给大家供大家参考.具体如下: using System; using System.IO; namespace Client.Chapter_11___File_and_Streams { public class OpenExistingFile { static void Main(string[] args) { FileInfo MyFile = new FileInfo(@"c:\Projects\Testing.txt");

  • C#文件和字节流的转换方法

    本文实例讲述了C#文件和字节流的转换方法.分享给大家供大家参考.具体实现方法如下: 1.读取文件,并转换为字节流 FileStream fs = new FileStream(filename,FileMode.Open,FileAccess.Read); byte[] infbytes = new byte[(int)fs.Length]; fs.Read(infbytes, 0, infbytes.Length); fs.Close(); return infbytes; 2.将字节流写入文

  • C#通过流写入数据到文件的方法

    本文实例讲述了C#通过流写入数据到文件的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.IO; public class WriteFileStuff { public static void Main() { FileStream fs = new FileStream("c:\\tmp\\WriteFileStuff.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWr

  • c#通过DES加密算法加密大文件的方法

    本文实例讲述了c#通过DES加密算法加密大文件的方法.分享给大家供大家参考.具体实现方法如下: using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using Syst

  • C#从文件流读取xml文件到DataSet并显示的方法

    本文实例讲述了C#从文件流读取xml文件到DataSet并显示的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: DataSet ds= new DataSet (); FileStream fs = new FileStream (Server.MapPath=("somexml.xml"),FileMode.Open,FileAccess.Read); ds.ReadXml (fs); DataGrid1.DataSource = ds; DataGrid1.D

  • C#中基于流的XML文件操作笔记

    System.Xml.XmlReader和System.Xml.XmlWriters是两个抽象类,XmlReader提供了对于XML数据的快速,非缓存,只进模式的读取器,XmlWriter表示一个编写器,该编写器提供快速,非缓存,只进的方式来生成包含XML数据的流文件. XmlReader与SAX读取器类似,不过前者是提取模式(只进只读的游标),后者是推送模式(将事件推送到应用程序). XmlReader的优点是: 1. 简化状态管理 2.可以有多个输入流 3.提取模式可以作为推送模式的基础,反

  • C# FileStream读写的文本操作代码分析

    FileStream对象表示在磁盘或网络路径上指向文件的流. 可以使用FileStream 类对文件系统上的文件进行读取.写入.打开.关闭等. 废话不说,开始操作. 1.拖好控件.必须滴,将除了要写文件的文本框外,其他的文本框的 ReadOnly 属性均设为 True ! 2.开始"选择文件"操作 privatevoid btnReadChoose_Click(object sender, EventArgs e) { //创建 打开文件 对话框,可以直接拖控件哈.. OpenFile

  • asp.net(C#)中上传大文件的几中常见应用方法

    几种常见的方法,本文主要内容包括: 第一部分:首先我们来说一下如何解决ASP.net中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改Web.Config文件来自定义最大文件大小,如下: 这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大 MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理.解决的方法是利用隐含的 HttpWorkerRequest,用它的GetPreloaded

随机推荐