最近在学习ASP.NET FileStream的异步读写,但是在网上找了很长时间,一直没有找到好的实例。
C#.net的实例倒是有,但是放到ASPX的网页里面就报很多错误,本人初学ASP.NET,请各位大虾赐教。
最好给个实例,谢了

解决方案 »

  1.   

    自己将找到的C#代码改出来的一点东东,贴出来抛砖引玉。
    这段代码能实现异步读取,但是用的是同步写入(异步写入还不会),
    运行一下就会将"程序生成.txt"拷贝到"async.txt"中(部分拷贝,因为不会byte 类型的数组的合并),同时将"程序生成.txt"内容显示在网页上
    但是在运行完之后页面上并不能显示"程序生成.txt"中的内容,要多刷新几次才能显示,
    现在还不明白怎么回事,请大虾们给点意见
    ===================
    AsyncRead.aspx
    ===================
    <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" Debug="true" %>
    <%@ Import Namespace="System.IO" %>
    <html>
    <head>
    <script runat="server">
    string path;//要读取的文本文件的路径
    const int bufferSize = 5;//演示,一次只读取5 byte//如果这个值设得足够大,那就相当于同步读取
    byte[] data;
    byte[] datas;
    string aa="";protected void Page_Load(Object Src, EventArgs E)
    {
        path =Server.MapPath("程序生成.txt");
    asyncRead();
    }public void asyncRead(){
           data = new byte[bufferSize];
               FileStream fs = new FileStream(path, FileMode.Open,FileAccess.Read, FileShare.Read, 20480, true);//设置异步调用true, 注意0           //异步读取文件,把FileStream对象作为异步的参数// <-
                AsyncCallback callback = new AsyncCallback(OnReadCompletion);
               IAsyncResult async = fs.BeginRead(data, 0, bufferSize, callback, fs); // <-
       
               un.Text=aa; //un为label空间,用来显示读取的内容
       
       //下面把读到的byte数据写入async.txt文件 (因为data里面只有一次读取的数据,只有5bytes,所以async.txt只有很少的文字)
       //byte 类型的数组data的相加就不会了
       string DFile=Server.MapPath("async.txt");
       FileStream fsD=new FileStream(DFile,FileMode.Create,FileAccess.Write);
       BinaryWriter bw=new BinaryWriter(fsD);
       bw.BaseStream.Seek(0,SeekOrigin.End);
       bw.Write(data);
       bw.Close();
       fsD.Close();
       //================================
               eg.Text="AsyncRead OK";// Label控件显示
    }public void OnReadCompletion(IAsyncResult asyncResult)
    {
                FileStream fs = asyncResult.AsyncState as FileStream;
                int bytesRead = fs.EndRead(asyncResult);
                //把每次读到的5bytes数据转成字符串相加,这样才能显示完整
    //byte 类型的数组data的相加就不会了
                aa=aa + (Encoding.ASCII.GetString(data, 0, bytesRead));
                //不断循环,直到读取完毕
    AsyncCallback callback = new AsyncCallback(OnReadCompletion);
                if (bytesRead > 0){
                   fs.BeginRead(data, 0, bufferSize, callback, fs);
    }
                else{
                   fs.Close(); //当全部读取完毕,显式释放资源
    }
    }
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>Application对象</title>
    </head>
    <body>
    <asp:Label ID="un" Text="" runat="server"/><br />
    <asp:Label ID="flg" Text="" runat="server"/><br />
    <asp:Label ID="eg" Text="" runat="server"/><br />
    </body>
    </html>
      

  2.   

    http://blog.csdn.net/yw0031/archive/2007/04/26/1586030.aspx