由于需求是不压缩文件,直接提取到内存中,折腾了好久,最后才发现其实蛮简单的。
就是用文件流读进来以后,赋值给一个内存流,然后把这个内存流赋值给一个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 ; } } } } } } |