解压缩时拆分大文本文件(SharpZipLib)

时间:2015-03-20 11:50:46

标签: c# sharpziplib

我使用以下代码解压缩文件(文本文件),然后我将CSV解析器读入内存并按照我认为合适的方式进行操作。这没有问题,但我在一些zip驱动器中有一些相当大的文件,因为我的代码的其余部分是并行化的,它运行速度更快(并且更不容易出错),有三个100MB文件而不是一个300MB文件。

这是我当前的解压缩代码(使用ICSharpCode.SharpZipLib.dll):

  public static void ExtractZipFile(string archiveFilenameIn, string password, string outFolder)
    {
        //unzip function based on SharpZipLib (external ref dll)
        ZipFile zf = null;
        try
        {
            FileStream fs = File.OpenRead(archiveFilenameIn);
            zf = new ZipFile(fs);
            if (!String.IsNullOrEmpty(password))
            {
                zf.Password = password;     
            }
            foreach (ZipEntry zipEntry in zf)
            {
                if (!zipEntry.IsFile)
                {
                    continue;           // Ignore directories
                }
                String entryFileName = zipEntry.Name;

                byte[] buffer = new byte[4096];     // 4K is optimum
                Stream zipStream = zf.GetInputStream(zipEntry);

                String fullZipToPath = Path.Combine(outFolder, entryFileName);
                string directoryName = Path.GetDirectoryName(fullZipToPath);
                if (directoryName.Length > 0)
                    Directory.CreateDirectory(directoryName);
                using (FileStream streamWriter = File.Create(fullZipToPath))
                {
                    StreamUtils.Copy(zipStream, streamWriter, buffer);
                }
            }
        }
        finally
        {
            if (zf != null)
            {
                zf.IsStreamOwner = true; // Makes close also shut the underlying stream
                zf.Close(); // Ensure we release resources
            }
        }
    }

我可能只是解压缩,拆分然后读入内存,但这看起来很麻烦。我的问题是:

一旦超过阈值,我可以调整上面的代码来写入不同的输出文件吗?因此,如果文件限制为100MB且解压缩总大小为287MB,我想提取到3个文件......

0 个答案:

没有答案