【发布时间】:2015-09-13 10:05:25
【问题描述】:
我试图不超过内存最大大小,所以我必须每次检查它是否大于最大内存大小然后我将它刷新到 zip 文件 Stream 中。问题在这里它用文件流中存在的内存流替换内存流,或者有没有办法用另一种方式做同样的事情(但不使用任何 DLL Lib)
MemoryStream memoryStream = new MemoryStream();
FileStream fileStream = new FileStream(sbZipFolderName.ToString(),FileMode.Create);
foreach (FileInfo flInfo in ListfileFolderPaths)
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Update, true))
archive.CreateEntryFromFile(flInfo.FullName, slastFolderName + "/" + flInfo.DirectoryName.Replace(new DirectoryInfo(sFolderPath.ToString()).FullName, "") + "/" + flInfo.Name);
if (memoryStream.Length > MaxSize)
{
using (fileStream = new FileStream(sFolderPath + "/" + slastFolderName + ".zip", FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.CopyTo(fileStream);
memoryStream = new MemoryStream();
}
}
}
if ((memoryStream != null) && (memoryStream.Length > 0))
memoryStream.CopyTo(fileStream);
【问题讨论】:
-
为什么要使用
MemoryStream?只需在FileStream上打开您的ZipArchive。 -
谢谢你的回复,有没有例子说明如何做到这一点
-
没什么可给的 -
new ZipArchive(fileStream, ...并删除所有与MemoryStream相关的代码。