找回密码
 立即注册

QQ登录

只需一步,快速开始

fengzhongxia
初级会员   /  发表于:2011-3-6 16:43  /   查看:8139  /  回复:7
代码如下:
  1.         Dim stmSave As IO.Stream
  2.         Dim filename As String = "c:\tt.tmp"
  3.         stmSave = IO.File.Create(filename)
  4.         frmSheets.fpsMain.Save(stmSave, False)
  5.         Dim b(stmSave.Length) As Byte
  6.         stmSave.Read(b, 0, stmSave.Length)

  7.         stmSave.Close()
复制代码
把stream读入到字节数组中后,字节数组内的数据全是0.不知为啥。

7 个回复

倒序浏览
fengzhongxia
初级会员   /  发表于:2011-3-7 10:42:00
沙发
我估计是你们控件的BUG。保存为流时,其实没有把数据写入流中。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2011-3-7 11:37:00
板凳
首先,这是将stream  read到btye[]数组的问题,我们正在帮你找解决方案。
另外,你可以查看一下c:\tt.tmp,来确认这不是Spread的bug,c:\tt.tmp文件是一XML样式保存的。可以将c:\tt.tmp文件导入到Spread中,它与之前保存的Spread相同。
回复 使用道具 举报
fengzhongxia
初级会员   /  发表于:2011-3-7 11:44:00
地板
感谢回复。希望能有解决方法,我只是想把SPREAD保存进字节数组。能实现这个功能的话,我做的软件才完美,那样的话,我肯定会购买正式版的。我现在只是在试用中。看SPRED是否能满足我的要求。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2011-3-7 11:46:00
5#
我理解,你是不想与文件有操作,而希望在内存中解决。
你可以考虑使用MemoryStream

  1. MemoryStream stmSave = new MemoryStream();
  2. this.fpSpread1.Save(stmSave, false);
  3. byte[] b = stmSave.ToArray();
复制代码
回复 使用道具 举报
Arthas
葡萄城公司职员   /  发表于:2011-3-7 11:55:00
6#
我猜应该是你忘了把Stream给Seek回去吧?
纯猜测。
扯淡第一高手
回复 使用道具 举报
gerry
论坛元老   /  发表于:2011-3-7 13:32:00
7#
楼上正解

  1. Dim stmSave As IO.Stream
  2. Dim filename As String = "c:\tt.tmp"
  3. stmSave = IO.File.Create(filename)
  4. frmSheets.fpsMain.Save(stmSave, False)
  5. Dim b(stmSave.Length) As Byte

  6. stmSave.Position = 0
  7. '或者
  8. stmSave.Seek(0, IO.SeekOrigin.Begin)

  9. stmSave.Read(b, 0, stmSave.Length)
  10. stmSave.Close()
复制代码
因为你对流进行写操作后 流的position被置在末尾,这时候你需要重置position的位置或者seek到流开头位置.
回复 使用道具 举报
fengzhongxia
初级会员   /  发表于:2011-3-7 18:35:00
8#
老大,茅塞顿开呀。感谢各位。灰常感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部