我无法在我的UWP应用程序中使用System.IO.Compression库,我需要用它来压缩一个太大而无法放入隔离存储的字符串。我怀疑这是在我更新所有Nuget包时开始的。我一直收到以下错误,代码如下所示,
编辑:这似乎只发生在DEBUG模式下。当我在RELEASE模式下编译我的应用程序并部署到设备或本地机器上时,两者都可以工作。但是当我尝试进行调试时,它会崩溃(崩溃发生在稍后尝试使用包含空内容的解压缩字符串的代码中 - 在using语句中失败了 - 并且我的应用程序中的其余代码已被执行)
消息
底层压缩例程无法正确加载。
堆栈跟踪
编辑:这似乎只发生在DEBUG模式下。当我在RELEASE模式下编译我的应用程序并部署到设备或本地机器上时,两者都可以工作。但是当我尝试进行调试时,它会崩溃(崩溃发生在稍后尝试使用包含空内容的解压缩字符串的代码中 - 在using语句中失败了 - 并且我的应用程序中的其余代码已被执行)
消息
底层压缩例程无法正确加载。
堆栈跟踪
在System.IO.Compression.Deflater.DeflateInit(CompressionLevel compressionLevel, Int32 windowBits, Int32 memLevel, CompressionStrategy strategy)处初始化压缩级别、窗口位数、内存级别和压缩策略;在System.IO.Compression.Deflater..ctor(CompressionLevel compressionLevel, Int32 windowBits)处构造压缩级别和窗口位数;在System.IO.Compression.DeflateStream.InitializeDeflater(Stream stream, Boolean leaveOpen, Int32 windowBits, CompressionLevel compressionLevel)处初始化压缩流的压缩器;在System.IO.Compression.DeflateStream..ctor(Stream stream, CompressionMode mode, Boolean leaveOpen, Int32 windowBits)处构造压缩流的压缩器,这些是代码中出现的方法。
我认为这可能与此有关
我不知道该怎么办。是否有一种不依赖于System.IO的替代Zip库,我可以在UWP中使用?- 我尝试安装DotNetZip但无法安装。
代码
public static class Extensions
{
/// <summary>
/// Compresses a string and returns a deflate compressed, Base64 encoded string.
/// </summary>
/// <param name="uncompressedString">String to compress</param>
public static string Compress(this string uncompressedString)
{
var compressedStream = new MemoryStream();
var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(uncompressedString));
using (var compressorStream = new DeflateStream(compressedStream, CompressionMode.Compress, true))
{
uncompressedStream.CopyTo(compressorStream);
}
return Convert.ToBase64String(compressedStream.ToArray());
}
/// <summary>
/// Decompresses a deflate compressed, Base64 encoded string and returns an uncompressed string.
/// </summary>
/// <param name="compressedString">String to decompress.</param>
public static string Decompress(this string compressedString)
{
var decompressedStream = new MemoryStream();
var compressedStream = new MemoryStream(Convert.FromBase64String(compressedString));
using (var decompressorStream = new DeflateStream(compressedStream, CompressionMode.Decompress))
{
decompressorStream.CopyTo(decompressedStream);
}
return Encoding.UTF8.GetString(decompressedStream.ToArray());
}
}