c# Package.Open报:powerbi文件包含损坏的数据据。

郁闷了一天终于搞定这个问题了,出现这个问题时候文件其实内容还是可以打开的,就是出现以上的错误原因。经过最终分析确定了具体原因,是因为在Response下载文档时候,最后需要结束
System.Web.HttpContext.Current.Response.End();否则默认为不完整下载状态。反正我加上去后就不出现以上情况了。具体代码如下:
/// &summary&
/// 下载文件
/// &/summary&
public void LoadPaperTemplate(string mStrFileName)
FileStream fs =
BinaryReader br =
BinaryWriter brnew =
//给内容赋值
string path = System.Web.HttpContext.Current.Server.MapPath("~/Template");
string mStrFileRoot = string.Format("{0}\\{1}", path, mStrFileName);
if (File.Exists(mStrFileRoot))
fs = new System.IO.FileStream(mStrFileRoot, System.IO.FileMode.Open);
br = new BinaryReader((Stream)fs);
byte[] bytes = br.ReadBytes((Int32)fs.Length);
brnew = new BinaryWriter(fs);
brnew.Write(bytes, 0, bytes.Length);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer =
System.Web.HttpContext.Current.Response.Charset = "GB2312";
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "
filename=" + HttpUtility.UrlEncode(mStrFileRoot.Substring(mStrFileRoot.LastIndexOf('\\') + 1)));
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
System.Web.HttpContext.Current.Response.ContentType = "application/ms-word";
System.Web.HttpContext.Current.Response.BinaryWrite(bytes);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
catch (Exception)
br.Close();
brnew.Close();
fs.Close();
阅读(...) 评论()C# System.IO.FileStream 中的OpenRead()方法使用_百度知道
C# System.IO.FileStream 中的OpenRead()方法使用
FileInfo fi = new FileInfo(“某个已知路径的文件假设包含5000个字节”);
System.IO.FileStream fs = fi.OpenRead();
byte [] bInfo = new byte[2000];
fs.Read(bInfo, 0, 2000);//这读取的是 f s 中的前2000个byte我知道
byte [] bInfoTwo = new byte[2...
我有更好的答案
按MSDN, FileStream.Read方法的原型为:public&override&int&Read(byte[]&array,int&offset,int&count);其中 arry为缓冲区, offset为 array&中字节的偏移量(缓冲区索引),count&参数给出最多读取的字节数。如果读操作成功,则流的当前位置前进读取的字节数。如果发生异常,则流的当前位置不变在你的程序中,第一次读出2000字节后,流的当前位置前进了2000个字节,流中还有3000字节没有读取;第二次读入操作,起始位置为2000,读入剩下的3000字节(后3000字节)。另外,你程序中后两个Read函数的参数有错误。
采纳率:87%
stream里有个position,当你使用任何read的时候,都会往后移,并从该位置开始read 所以你那个 是 剩下的3000个
FileInfo&fi&=&new&FileInfo(&E:/aa/aa.txt&);//某个已知路径的文件假设包含5000个字节&&&&&&&&&&&&System.IO.FileStream&fs&=&fi.OpenRead();&&&&&&&&&&&&byte&[]&bInfo&=&new&byte[2000];&&&&&&&&&&&&fs.Read(bInfo,&0,&2000);//这读取的是&f&s&中的前2000个byte,执行结束后fs就剩下3000个未读了&&&&&&&&&&&&string&str&=&System.Text.Encoding.Default.GetString(bInfo);&&&&&&&&&&&&Console.WriteLine(str);&&&&&&&&&&&&Console.WriteLine(&______________________________________&);&&&&&&&&&&&&byte&[]&bInfoTwo&=&new&byte[2000];&&&&&&&&&&&&fs.Read(bInfoTwo,&0,&2000);//这个位置是读取&f&s&剩下的前2000个byte,执行结束后fs就剩下1000个未读了&&&&&&&&&&&&str&=&System.Text.Encoding.Default.GetString(bInfoTwo);&&&&&&&&&&&&Console.WriteLine(str);&&&&&&&&&&&&Console.WriteLine(&______________________________________&);&&&&&&&&&&&&byte&[]&bf&=new&byte[1000];&&&&&&&&&&&&fs.Read(bf,&0,&1000);//这个是读取&f&s&中未读的第1个byte,到未读的第2000个byte,读完就没有了&&&&&&&&&&&&str&=&System.Text.Encoding.Default.GetString(bf);&&&&&&&&&&&&Console.WriteLine(str);&&&&&&&&&&&&Console.WriteLine(&______________________________________&);&&&&&&&&&&&&Console.WriteLine(&______________________________________&);
为您推荐:
其他类似问题
filestream的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C# TCP 异步Socket传文件时发现速度太快的时会出现接收的数据出错
[问题点数:40分,结帖人u]
C# TCP 异步Socket传文件时发现速度太快的时会出现接收的数据出错
[问题点数:40分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2015年3月 .NET技术大版内专家分月排行榜第三2015年2月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|

我要回帖

更多关于 powerbi文件包含损坏的数据 的文章

 

随机推荐