摘要
ZipArchive 类是 C# 中用于处理 ZIP 文件的类。它提供了一组方法和属性,可以方便地创建、压缩和解压 ZIP 文件。本文将介绍 ZipArchive 类的常用属性和方法,并提供一些示例代码来说明如何使用它们。
正文
常用属性与方法
除了上述示例中使用的属性和方法外,ZipArchive 类还提供了许多其他有用的属性和方法,以下是一些常用的:
- Entries:获取 ZIP 文件中的所有条目。
- GetEntry(string entryName):根据条目名称获取 ZIP 文件中的条目。
- CreateEntry(string entryName):创建一个 ZIP 文件中的条目。
- ExtractToDirectory(string destinationDirectoryName):将 ZIP 文件中的所有文件和目录解压到指定的目录中。
- Dispose():释放 ZipArchive 对象占用的资源。
创建 ZIP 文件
要创建 ZIP 文件,我们可以使用 ZipArchive 类的构造函数创建一个新的 ZIP 文件。构造函数接受一个 Stream 对象和一个 ZipArchiveMode 枚举值作为参数。我们可以使用 FileStream 或 MemoryStream 来创建 Stream 对象,然后将其传递给构造函数。
static void Main(string[] args)
{
string zipFile = "D:\\BaiduSyncdisk\\11Test\\compressed.zip";
using (FileStream zipStream = new FileStream(zipFile, FileMode.Create))
{
using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
Console.WriteLine("ZIP file created.");
}
}
}
在上面的示例中,我们指定了要创建的 ZIP 文件的路径 zipFile。然后,我们使用 FileStream 创建一个新的文件流 zipStream,并将其传递给 ZipArchive 类的构造函数。我们还指定了 ZipArchiveMode.Create 作为构造函数的第二个参数,以指示我们要创建一个新的 ZIP 文件。在 using 语句块中,我们可以执行其他与 ZIP 文件相关的操作。在这个示例中,我们只是输出一条消息来表示 ZIP 文件已经成功创建。
压缩整个目录
要压缩整个目录,我们可以使用 ZipFile 类的 CreateFromDirectory 方法。该方法接受三个参数:要压缩的目录的路径、要生成的 ZIP 文件的路径和一个枚举值,用于指定是否包括目录结构。
static void Main(string[] args)
{
string sourceDirectory = "D:\\BaiduSyncdisk\\11Test\\CHelpers\\obj";
string zipFile = "D:\\BaiduSyncdisk\\11Test\\compressed1.zip";
if(File.Exists(zipFile) )
{
File.Delete(zipFile);
}
ZipFile.CreateFromDirectory(sourceDirectory, zipFile, CompressionLevel.Optimal, false);
Console.WriteLine("Directory compressed.");
}
解压 ZIP 文件
要解压 ZIP 文件,我们可以使用 ZipFile 类的 ExtractToDirectory 方法。该方法接受两个参数:要解压的 ZIP 文件的路径和要生成的目录的路径。
static void Main(string[] args)
{
string extractDirectory = "D:\\BaiduSyncdisk\\11Test\\obj1";
string zipFile = "D:\\BaiduSyncdisk\\11Test\\compressed1.zip";
ZipFile.ExtractToDirectory(zipFile, extractDirectory);
Console.WriteLine("ZIP file extracted.");
}
压缩和解压单个文件
除了压缩和解压整个目录,我们还可以压缩和解压单个文件。要压缩单个文件,我们可以使用 ZipArchive 类的 CreateEntryFromFile 方法。要解压单个文件,我们可以使用 ZipArchiveEntry 类的 ExtractToFile 方法。
static void Main(string[] args)
{
string sourceFile = "D:\\BaiduSyncdisk\\11Test\\测试导入数据2.csv";
string zipFile = "D:\\BaiduSyncdisk\\11Test\\compressed3.zip";
string extractFile = "D:\\BaiduSyncdisk\\11Test\\extracted.csv";
using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open))
{
using (FileStream zipStream = new FileStream(zipFile, FileMode.Create))
{
using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
ZipArchiveEntry entry = archive.CreateEntry(Path.GetFileName(sourceFile));
using (Stream entryStream = entry.Open())
{
sourceStream.CopyTo(entryStream);
}
}
}
}
using (FileStream zipStream = new FileStream(zipFile, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read))
{
ZipArchiveEntry entry = archive.GetEntry(Path.GetFileName(sourceFile));
entry.ExtractToFile(extractFile);
}
}
Console.WriteLine("File compressed and extracted.");
}
在上面的示例中,我们首先使用 FileStream 读取源文件 sourceFile 的内容,然后使用 ZipArchive 类创建一个 ZIP 文件,并使用 CreateEntry 方法将源文件的内容添加到 ZIP 文件中。然后,我们使用 FileStream 打开 ZIP 文件,并使用 ZipArchive 类获取 ZIP 文件中的条目,然后使用 ExtractToFile 方法将条目解压到指定的文件中。最后,我们使用 Console.WriteLine 输出一条消息,表示单个文件已经成功压缩和解压。
总结
使用 C# 中的 ZipArchive 类,我们可以轻松地进行 ZIP 文件的压缩和解压操作。本文详细介绍了如何创建 ZIP 文件、压缩整个目录、解压 ZIP 文件以及压缩和解压单个文件的方法。此外,我们还介绍了一些常用的属性和方法,以便更好地理解和使用 ZipArchive 类。根据实际需求和场景,我们可以灵活地使用这些功能来处理 ZIP 文件。