SharpZip将压缩包中的内容提取到内存中处理

由于需求是不压缩文件,直接提取到内存中,折腾了好久,最后才发现其实蛮简单的。 就是用文件流读进来以后,赋值给一个内存流,然后把这个内存流赋值给一个Image对象。这些天折腾了好多次了,先是用DotNetZip处理,发现 DotNetZip压缩超过4G以上的文件就会报错,无奈之下换SharpZip,又折腾了好久,终于搞定了。推荐还是用SharpZip,亲自测试过: 压缩了一个五十几G的文件,没问题,压缩了一万个文件,也没问题
贴下代码
 C# Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using  (ZipFile zip =  new  ZipFile(@ "C:\Users\lx\Desktop\test.zip" ))
{
    
string  str = @ "picture\1.jpg" ;
    ZipEntry theEntry = 
new  ZipEntry(str.Replace( "\\" "/" ));
    
using  (ZipInputStream zipfiles =  new  ZipInputStream(File.OpenRead(@ "C:\Users\lx\Desktop\test.zip" )))
    {
        
for  ( int  i =  0 ; i < zip.Count; i++)
        {
            ZipEntry entryInZip = zipfiles.GetNextEntry();
            
if  (entryInZip ==  null )
            {
                
throw   new  Exception( "未找到该文件:"  + str);
            }
            
if  (entryInZip.Name != theEntry.Name && entryInZip !=  null )
            {
                
continue ;
            }
            
else
            {
                
int  size =  1024  *  1024  *  1024 ;
                
byte [] data =  new   byte [size];
                
while  ( true )
                {
                    size = zipfiles.Read(data, 
0 , data.Length);
                    
if  (size >  0 )
                    {
                        
using  (MemoryStream ms =  new  MemoryStream(data))
                        {
                            image = Image.FromStream(ms);
                            pictureBox1.Image = image;
                        }
                    }
                    
else
                    {
                        
break ;
                    }
                }
            }


        }

    }
}
总结:在没有实现直接提取到内存时,是解压了以后,使用完了再删除。开始总是File.Delete()删除文件不成功,在该处调试总是会自动结束程序,后来看到一句前任经验: 不能删除要不然是没有权限,要不然是文件正在使用,仔细检查了所有使用的资源,最后确认释放了所有资源后,终于删除成功了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值