BinaryReader的 Seek方法的使用

kun7711476 2012-12-05 11:42:06
Dim bReader As New BinaryReader(Request.InputStream)//接收一个流
bReader.BaseStream.Seek(0, SeekOrigin.Begin)//设置position
Dim sss = bReader.BaseStream.Position//
Dim byte2() As Byte = bReader.ReadBytes(bReader.BaseStream.Length)
总的来说就是我在另一个页面写的输入流,到这个处理时,BinaryReader的position已经是最后的一个字节了,我应该用什么方法把position设置到第一个位置,这样我才能读到那个文件的二进制信息!!!求指导。。。
...全文
487 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kun7711476 2012-12-05
  • 打赏
  • 举报
回复
但是那个bReader.BaseStream.Length却是有值的,不知道谁遇到过这种情况?
kun7711476 2012-12-05
  • 打赏
  • 举报
回复
不行,那样设置position还是没有变化,Dim byte2() As Byte = bReader.ReadBytes(bReader.BaseStream.Length) 这句话的byte2数组拿不到值,长度是0是什么情况啊?
bdmh 2012-12-05
  • 打赏
  • 举报
回复
直接Position = 0
kun7711476 2012-12-05
  • 打赏
  • 举报
回复
其实就是想问下大概要用什么方法设置position ,貌似seek不能设置吧?
Tiger_Zhao 2012-12-05
  • 打赏
  • 举报
回复
所谓的流(Stream)就是只能读一遍的。Seek 可以向前(忽略部分数据)但不能向后。
对于文件流,可以重新打开,再读一遍。
大多数流,要重复读取就必须自己缓存数据。
大文件上传 断点上传 客户端 /// /// 服务器端地址,部署时为Web端的地址,可以用配置文件实现 /// public static string serverPath; /// /// 上传文件(按照文件名称上传,支持断点) /// /// 待上传文件全路径 /// 上传时的流量控制,文件较大时,用于切割文件上传 /// 错误信息 /// 成功或者失败 public static bool UpLoadFile(string fileName, int byteCount,out string msg) { msg = ""; bool result = true; long cruuent = GetServerFileLength(fileName); FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader bReader = new BinaryReader(fStream); long length = fStream.Length; fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1); #region 开始上传文件 try { #region 续传处理 byte[] data; if (cruuent > 0) { fStream.Seek(cruuent, SeekOrigin.Current); } #endregion #region 分割文件上传 for (; cruuent <= length; cruuent = cruuent + byteCount) { if (cruuent + byteCount > length) { data = new byte[Convert.ToInt64((length - cruuent))]; bReader.Read(data, 0, Convert.ToInt32((length - cruuent))); } else { data = new byte[byteCount]; bReader.Read(data, 0, byteCount); } try { Hashtable parms = new Hashtable(); parms.Add("fileName", fileName); parms.Add("npos", cruuent.ToString()); parms.Add("method", "SaveUpLoadFile"); byte[] byRemoteInfo = PostData(serverPath, data, parms); } catch (Exception ex) { msg = ex.ToString(); result = false; break; } #endregion } } catch (Exception ex) { throw ex; } finally { bReader.Close(); fStream.Close(); } GC.Collect(); #endregion return result; } /// /// 调用服务器端方法,或者服务器端,同名称的文件,已经上传的大小 /// /// 待上传文件全路径 /// 服务器端文件的大小,如果以前没有上传过,则返回0 private static long GetServerFileLength(string fileName) { fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1); Hashtable parms = new Hashtable(); parms.Add("fileName", fileName); parms.Add("method", "GetServerFileLength"); long length = 0; byte[] data = new byte[0]; byte[] byRemoteInfo = PostData(serverPath, data, parms); string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo); length = Convert.ToInt64(sRemoteInfo); return length; } /// /// 向服务器端提交数据 /// /// 服务器端地址 /// 要发送的数据 /// 附加参数,用URL的方式将此参数附件到地址中 /// 服务器端返回的 byte[] private static byte[] PostData(string serverURL, byte[] data, Hashtable parms) { System.Net.WebClient webClientObj = new System.Net.WebClient(); if (parms != null) { serverURL = serverURL + "?"; foreach (string key in parms.Keys) { serverURL = serverURL + key + "=" + parms[key].ToString() + "&"; } serverURL.TrimEnd('&'); } byte[] byRemoteInfo = webClientObj.UploadData(serverURL, "POST", data); return byRemoteInfo; } 接收端 /// /// 保存文件(从URL参数中获取文件名、当前指针,将文件流保存到当前指针后) /// 如果是第一次上传,则当前指针为0,代码执行与续传一样,只不过指针没有偏移 /// /// 文件名 /// 当前指针偏移 /// public int SaveUpLoadFile(string fileName, long npos) { int upLoadLength = Convert.ToInt32(HttpContext.Current.Request.InputStream.Length); string file = HttpContext.Current.Server.MapPath("/" + fileName); //string path = HttpContext.Current.Server.MapPath("/"); //fileName = path + "UpLoad\\" + fileName; FileStream fStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite); //偏移指针 fStream.Seek(npos, SeekOrigin.Begin); //从客户端的请求中获取文件流 BinaryReader bReader = new BinaryReader(HttpContext.Current.Request.InputStream); try { byte[] data = new byte[upLoadLength]; bReader.Read(data, 0, upLoadLength); fStream.Write(data, 0, upLoadLength); return 1; } catch { //TODO 添加异常处理 } finally { //释放流 fStream.Close(); bReader.Close(); } return -1; }

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧