DeflateStream CopyTo 不写任何内容,也不会抛出任何异常
本文关键字:任何 异常 CopyTo 任何内 DeflateStream | 更新日期: 2023-09-27 18:33:43
我基本上直接从 msdn 复制了这个代码示例,并进行了一些最小的更改。CopyTo
方法正在默默地失败,我不知道为什么。什么会导致此行为?它正在传递一个 78 KB 的压缩文件夹,其中包含一个文本文件。返回的 FileInfo
对象指向 0 KB 文件。不会引发任何异常。
public static FileInfo DecompressFile(FileInfo fi)
{
// Get the stream of the source file.
using (FileStream inFile = fi.OpenRead())
{
// Get original file extension,
// for example "doc" from report.doc.cmp.
string curFile = fi.FullName;
string origName = curFile.Remove(curFile.Length
- fi.Extension.Length);
//Create the decompressed file.
using (FileStream outFile = File.Create(origName))
{
// work around for incompatible compression formats found
// here http://george.chiramattel.com/blog/2007/09/deflatestream-block-length-does-not-match.html
inFile.ReadByte();
inFile.ReadByte();
using (DeflateStream Decompress = new DeflateStream(inFile,
CompressionMode.Decompress))
{
// Copy the decompression stream
// into the output file.
Decompress.CopyTo(outFile);
return new FileInfo(origName);
}
}
}
}
在评论中,您说您正在尝试解压缩zip文件。DeflateStream
类不能在 zip 文件上像这样使用。您提到的 MSDN 示例使用 DeflateStream
创建单个压缩文件,然后解压缩它们。
尽管zip文件可能使用相同的算法(不确定),但它们不仅仅是单个文件的压缩版本。zip 文件是可以容纳许多文件和/或文件夹的容器。
如果你可以使用.NET Framework 4.5,我建议使用新的ZipFile
或ZipArchive
类。如果您必须使用早期的框架版本,则可以使用免费库(如DotNetZip或SharpZipLib)。