我目前正在使用SharpZipLib库, 在gzip中压缩后,我需要将.tar格式的文件分组,并获取所有压缩的字节。
以下代码可以正常工作,但是我需要执行内存中的所有逻辑并获取字节。
基本代码:
public static void TarCreateFromStream()
{
string tarOutFn = @"D:\\Directory\\CompressTest.tar.gz";
Stream outStream = File.Create(tarOutFn);
Stream gzoStream = new GZipOutputStream(outStream);
TarOutputStream tarOutputStream = new TarOutputStream(gzoStream);
CreateTarManually(tarOutputStream, @"D:\ReadFile");
tarOutputStream.Close();
}
public static void CreateTarManually(TarOutputStream tarOutputStream, string sourceDirectory)
{
TarEntry tarEntry = TarEntry.CreateEntryFromFile(sourceDirectory);
tarOutputStream.PutNextEntry(tarEntry);
string[] filenames = Directory.GetFiles(sourceDirectory);
foreach (string filename in filenames)
{
using (Stream inputStream = File.OpenRead(filename))
{
string tarName = filename.Substring(3);
long fileSize = inputStream.Length;
TarEntry entry = TarEntry.CreateTarEntry(tarName);
entry.Size = fileSize;
tarOutputStream.PutNextEntry(entry);
byte[] localBuffer = new byte[32 * 1024];
while (true)
{
int numRead = inputStream.Read(localBuffer, 0, localBuffer.Length);
if (numRead <= 0)
break;
tarOutputStream.Write(localBuffer, 0, numRead);
}
}
tarOutputStream.CloseEntry();
}
string[] directories = Directory.GetDirectories(sourceDirectory);
foreach (string directory in directories)
CreateTarManually(tarOutputStream, directory);
}