c# - 压缩后无效的 C# Zip 文件
问题描述
我正在编写代码以使用内置的 .NET 库在 C# 中压缩 ZIP 文件:
使用 System.IO.Compression;使用 System.IO;
但是,当压缩完成时,代码会输出一个无效的 zip 文件。似乎在代码中的某处,文件要么没有正确写入,要么完全关闭。我已经使用 dispose 和 close 来释放资源。
public bool CompressFile(FileInfo theFile)
{
StringBuilder compressSuccess = new StringBuilder();
FileStream sourceFile = File.OpenRead(theFile.FullName.ToString());
FileStream destinationFile = File.Create(theFile.FullName + ".zip");
byte[] buffer = new byte[sourceFile.Length];
sourceFile.Read(buffer, 0, buffer.Length);
using (GZipStream output = new GZipStream(destinationFile,
CompressionMode.Compress, true))
{
output.Write(buffer, 0, buffer.Length);
}
sourceFile.Dispose();
destinationFile.Dispose();
sourceFile.Close();
destinationFile.Close();
return true;
}
我会做错什么?是因为我强制扩展“.zip”吗?
解决方案
按照 FrankJames 建议的链接,这是创建 zip 文件的代码示例:
var zipFile = @"e:\temp\outputFile.zip";
var theFile = @"e:\temp\sourceFile.txt";
using (var zipToCreate = new FileStream(zipFile, FileMode.Create))
{
using (var archive = new ZipArchive(zipToCreate, ZipArchiveMode.Create))
{
var fileEntry = archive.CreateEntry("FileNameInsideTheZip.txt");
using (var sourceStream = File.OpenRead(theFile))
using (var destStream = fileEntry.Open())
{
var buffer = new byte[sourceStream.Length];
sourceStream.Read(buffer, 0, buffer.Length);
destStream.Write(buffer, 0, buffer.Length);
destStream.Flush();
}
}
}
推荐阅读
- reactjs - 运行我的 reactjs 项目时出现错误
- typescript - 打字稿错误后续变量声明必须具有相同的类型
- autodesk-forge - 如何在 Forge Viewer 中应用 Revit 显示设置?
- android - ActivityCompat.RequestPermissions 总是立即返回,OnRequestPermissionsResult 中的结果为 -1
- post - 发布表单时出现错误
- mysql - * 的列别名
- javascript - React-Native Metro 捆绑器无法提供任何文件
- sql-server - 使用 Always Encrypted 列运行 SQL 代理作业
- nginx-config - 如何从检查网络标头中隐藏远程地址。从 nginx 配置
- swift - Swift 中的对象分配和初始化