文件夹压缩到内存流,并将内存流转换成压缩文件,压缩文件一直打不开.
时间: 2020-06-04来源:博客园
前景提要
文件夹压缩到内存流,并将内存流转换成压缩文件,压缩文件一直打不开.
0 悬赏园豆: 60 [待解决问题] 在网上找了一个压缩文件夹的例子,需要要把压缩文件保存到流中,不知道为什么流转换成文件就一直打开失败

代码如下: class Class1 { public static void Main(string[] args) { var zipFileDirectory = ZipFileDirectory("C:\\test\\test1"); File.WriteAllBytes("C:\\test\\test1.zip", ZipFile.ToArray()); } private static byte[] ZipFileDirectory(string strDirectory) { using (System.IO.MemoryStream ZipFile = new MemoryStream()) { using (ZipOutputStream s = new ZipOutputStream(ZipFile)) { s.SetLevel(9); ZipSetp(strDirectory, s, ""); var buffer = ZipFile.ToArray(); return buffer; } } } private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath, List<string> files = null) { if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar) { strDirectory += Path.DirectorySeparatorChar; } string[] filenames = Directory.GetFileSystemEntries(strDirectory); foreach (string file in filenames)// 遍历所有的文件和目录 { if (files != null && !files.Contains(file)) { continue; } if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 { string pPath = parentPath; pPath += Path.GetFileName(file); pPath += "\\"; ZipSetp(file, s, pPath, files); } else // 否则直接压缩文件 { //打开压缩文件 string fileName = parentPath + Path.GetFileName(file); ZipEntry entry = new ZipEntry(fileName) { DateTime = DateTime.Now }; s.PutNextEntry(entry); using (FileStream fs = File.OpenRead(file)) { int sourceBytes; do { byte[] buffer = new byte[2048]; sourceBytes = fs.Read(buffer, 0, buffer.Length); s.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } } } } c# .net narojay | 初学一级 | 园豆: 14
提问于:2020-06-04 16:56 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 0 压缩是包,不是具体的文件,需要打开具体的文件流 然后保存再放入压缩包,而不是直接读取压缩包流 光明中的黑手 | 园豆:135 (初学一级) | 2020-06-04 18:04 using (System.IO.MemoryStream ZipFile = new MemoryStream()) 如果这边改成fileStream 是可以的生成文件到磁盘,但是目前的需求是不要把压缩文件生成到磁盘 而是直接返回给浏览器下载. 支持( 0 ) 反对( 0 ) narojay | 园豆:14 (初学一级) | 2020-06-04 21:30 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 using (ZipOutputStream s = new ZipOutputStream(ZipFile)) { s.SetLevel(9); ZipSetp(strDirectory, s, ""); s.Finish(); var buffer = ZipFile.ToArray(); return buffer; }
加个 s.Finush() 就可以了 narojay | 园豆:14 (初学一级) | 2020-06-08 16:26 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行