我使用以下代码解压缩文件(文本文件),然后我将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个文件......