我正在尝试实现 7z SDK 以一次压缩和解压缩多个文件。
我一次尝试使用一个文件,两种方法都有效,现在我对 compress 方法进行了一些更改,以支持压缩多个文件。
public static void CompressFile(List<string> inFiles, string outFile)
{
SevenZip.Compression.LZMA.Encoder coder = new SevenZip.Compression.LZMA.Encoder();
FileStream output = new FileStream(outFile, FileMode.Create);
// Write the encoder properties
coder.WriteCoderProperties(output);
int listSize = inFiles.Count;
// get the size of my list to loop through all the items
// Writing each file on the compressed file at a time
for(int i = 0; i < listSize; i++)
{
FileStream input = new FileStream(inFiles[i], FileMode.Open);
// Write the decompressed file size.
output.Write(BitConverter.GetBytes(input.Length), 0, 8);
// Encode the file.
coder.Code(input, output, input.Length, -1, null);
}
output.Flush();
output.Close();
}
我按预期得到了一个压缩文件,但我需要实现解压缩方法来测试一切是否顺利。
我一直在弄清楚如何实现解压缩多个文件所需的更改:
public static void DecompressFile(string inFile, string outFile)
{
//Original method used to decompress one file worked.
SevenZip.Compression.LZMA.Decoder coder = new SevenZip.Compression.LZMA.Decoder();
FileStream input = new FileStream(inFile, FileMode.Open);
FileStream output = new FileStream(outFile, FileMode.Create);
// Read the decoder properties
byte[] properties = new byte[5];
input.Read(properties, 0, 5);
// Read in the decompress file size.
byte[] fileLengthBytes = new byte[8];
input.Read(fileLengthBytes, 0, 8);
long fileLength = BitConverter.ToInt64(fileLengthBytes, 0);
coder.SetDecoderProperties(properties);
coder.Code(input, output, input.Length, fileLength, null);
output.Flush();
output.Close();
}
我有一个想法(不知道好不好)使用循环结构压缩所有文件,但我不能解压缩它。哪种方法最适合解压缩应该包含多个文件的文件?
慕妹3146593
相关分类