I'm using SharpZipLib to extract archives. I managed to extract .zip archives:
FastZip fastZip = new FastZip();
fastZip.ExtractZip(file, directory, null);
and to extract .tar.gz:
// Use a 4K buffer. Any larger is a waste.
byte[] dataBuffer = new byte[4096];
using (Stream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
using (GZipInputStream gzipStream = new GZipInputStream(fileStream))
{
// Change this to your needs
string fnOut = Path.Combine(directory, Path.GetFileNameWithoutExtension(file));
using (FileStream fsOut = File.Create(fnOut))
{
StreamUtils.Copy(gzipStream, fsOut, dataBuffer);
}
}
}
Is there also a way to extract any kind of archive where I don't need to know the type of archive upfront? (e.g. SharpZipLib.ExtractAnyArchive(file, directory)
)
答案 0 :(得分:1)
SharpZipLib 目前无法自动检测存档文件/流的格式。
您要么必须自己以某种形式实现功能,要么寻找能够自动检测档案格式的替代库。这样的库的一个例子是 SharpCompress ,但是,正如您在评论中已经提到的那样,不同的库可能会有不同的限制和错误,可能会影响软件的功能。
如果您决定为 SharpZipLib 推出自己的自动检测功能,则可以选择其他方法,例如
尝试对 SharpZipLib 支持的每种存档格式使用存档(阅读器/流)类打开(未知)存档,直到找到可以成功打开和处理存档文件的存档为止
实施某种格式检测例程,该例程会在存档文件/流中扫描标识特定存档格式的“魔术”签名字节。如果这样就确定了档案文件/流的格式,请选择并使用适当的 SharpZipLib 类来处理检测到的档案格式。