当前位置:编程学习 > C#/ASP.NET >>

有一段代码不理解,还望各位帮助解决

//文件解压,直接创建文件
        public static void Decompress(MemoryStream ms, string localPre_Path)
        {
            ms.Seek(0, SeekOrigin.Begin);
            FileStream fsOutput = new FileStream(localPre_Path, FileMode.OpenOrCreate);
            DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Decompress);
            int i = 0;
            int blockSize = 1024;
            byte[] b = new byte[blockSize];
            if (zipStream.CanRead)
            {
                i = zipStream.Read(b, 0, blockSize);
                if (i == 0)
                {
                    i = zipStream.Read(b, 0, blockSize);
                }
                while (i > 0)
                {
                    fsOutput.Write(b, 0, i);
                }
            }
            zipStream.Close();
            fsOutput.Close();
        }
这个是用.net自带的解压类进行解压,不知道大家发现这一段了没有  
i = zipStream.Read(b, 0, blockSize);
if (i == 0)
{
     i = zipStream.Read(b, 0, blockSize);
}让i = zipStream.Read(b, 0, blockSize);直接读数据,除了word文件可以直接读出,其他的像cs文件、图片文件都读不进数据,但是再让它读一次它就能读出来,所以才加了这么一句
if (i == 0)
{
        i = zipStream.Read(b, 0, blockSize);
  }
不知道我的意思表达清楚没有,还希望大家帮忙解释一下  --------------------编程问答-------------------- 理解你的意思了,不知道你要问什么 --------------------编程问答-------------------- 为什么会出现这样的情况,为什么有的文件不能一次这样i = zipStream.Read(b, 0, blockSize); 
读出来,再读一次才能读出来,为什么? --------------------编程问答-------------------- 是吗?应该不会有这种情况的,而且你的
                while (i > 0) 
                { 
                    fsOutput.Write(b, 0, i); 
                } 

有问题,明显的死循环啊。那个i的值始终没有改变,你不是要一直Write下去了吗? --------------------编程问答-------------------- 什么啊,我把流读出来的时候i才有值,读不出来的时候i一直为0,这样就能把流写入文件啊,功能是实现了的,但是对于这个现象很不理解,只能这样解决
i = zipStream.Read(b, 0, blockSize); 
if (i == 0) 

    i = zipStream.Read(b, 0, blockSize); 
}
希望大家能帮忙找出原因,有更好的办法解决
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,