拜求 ASP.NET FileStream异步读写实例(C#) 最近在学习ASP.NET FileStream的异步读写,但是在网上找了很长时间,一直没有找到好的实例。C#.net的实例倒是有,但是放到ASPX的网页里面就报很多错误,本人初学ASP.NET,请各位大虾赐教。最好给个实例,谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己将找到的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> http://blog.csdn.net/yw0031/archive/2007/04/26/1586030.aspx socket循环接受数据时会阻塞 wpf 后台c#加密xml 高手帮忙写个正则 C# listview的判断逻辑。。。老大们来看看 做一个软件在32位系统和64位系统运行。 在vs2008中的 设备仿真管理器 有个 插入底座和移出底座是什么意思啊? 用VS2005成功制作好一个安装程序,之后的更新问题 textbox问题 怎样才能让自己的程序不被别人反汇编 执行一段后台代码后弹出JS确认框,再根据确认框结果,继续执行不同的后台代码!!!!!急急急急 数据库文件不能更新! 数据库操作类 删除
这段代码能实现异步读取,但是用的是同步写入(异步写入还不会),
运行一下就会将"程序生成.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>