在 .NET 中从 ZIP 提取 DWT 内容

使用 Aspose.ZIP for .NET 检查 ZIP 存档,并仅还原 C# 应用程序所需的 DWT 文件。在本页中,提取是指从 ZIP 容器中选择 .dwt 文件并将其写入受控目标位置;Aspose.ZIP 不会解释或转换文件的内部内容。

选择性提取适用于文档导入、媒体资产、工程数据、项目包和自动化内容处理。应用程序可以跳过无关条目,执行输出和资源策略,并在不展开完整存档的情况下将已批准的文件传递给下一阶段。

如何使用 C# 从 ZIP 提取 DWT 文件

安装 Aspose.ZIP for .NET 包 并导入 Aspose.Zip 命名空间。在写入任何内容之前即可获取存档元数据,因此应用程序可以将 ArchiveEntry.Name、ArchiveEntry.IsDirectory 和 ArchiveEntry.UncompressedSize 作为验收策略的一部分进行评估。


Package Manager Console Command

PM> Install-Package Aspose.Zip

使用 Archive 打开 ZIP,枚举 Archive.Entries,选择扩展名为 .dwt 的条目,并对每个已批准的目标调用 ArchiveEntry.Extract。示例会将存档路径缩减为最终文件名,使条目无法逃离目标目录。

在 C# 中还原 DWT 文件的步骤

  • 解析源 ZIP 路径并创建隔离的输出目录。
  • 使用 Archive 类打开包。
  • 枚举 Archive.Entries,而不是展开每个项目。
  • 选择最终文件名使用 .dwt 扩展名的条目。
  • 构建始终位于已批准输出根目录下的目标路径。
  • 拒绝超过配置的解压后大小限制的条目。
  • 使用 ArchiveEntry.Extract 保存每个已接受的项目。

系统要求

运行示例之前,请确保环境包含:

  • Windows、Linux 或 macOS 上受支持的 .NET 运行时。
  • Visual Studio、JetBrains Rider、Visual Studio Code 或其他 C# 开发环境。
  • 通过 NuGet 安装或作为程序集引用的 Aspose.ZIP for .NET。
  • 对源存档的读取权限以及对目标目录的写入权限。
  • 适合不受信任压缩输入的存储和执行限制。

C# 示例:选择 ZIP 存档中的 DWT 文件

代码打开一个 ZIP 包,按已批准的扩展名筛选非目录条目,并将匹配文件写入一个输出目录。将存档路径扁平化可使示例保持紧凑,并防止父目录片段控制目标位置。生产代码还应为重复的输出名称定义确定性策略。

从 ZIP 提取 DWT 文件 - C#

using Aspose.Zip;
using System;
using System.IO;

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-dwt");
string[] allowedExtensions = { ".dwt" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    foreach (ArchiveEntry entry in archive.Entries)
    {
        if (entry.IsDirectory) continue;

        string fileName = Path.GetFileName(entry.Name);
        if (string.IsNullOrWhiteSpace(fileName)) continue;

        string extension = Path.GetExtension(fileName);
        if (!Array.Exists(
            allowedExtensions,
            value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
        {
            continue;
        }

        if (entry.UncompressedSize > MaxEntrySize)
        {
            throw new InvalidDataException(
                $"条目 '{fileName}' 超过 100 MB 提取限制。");
        }

        string destinationPath = Path.Combine(outputDirectory, fileName);
        entry.Extract(destinationPath);
    }
}

DWT 文件的实现说明

匹配的扩展名只能识别候选文件;它不能证明内容可读、有效或安全。在预览、转换或进一步处理之前,请使用理解 DWT 格式的组件验证已提取的文件。

该示例会扁平化普通文件的存档路径。如果两个已接受条目具有相同的最终名称,ArchiveEntry.Extract 可能会覆盖现有输出,因此应选择明确的冲突策略:拒绝重复项、生成唯一名称,或保留经过验证的相对目录树。为每个作业使用单独的目标位置,以免并发请求混合结果。

安全和隐私注意事项

请将存档名称和载荷视为不受信任。切勿将 ArchiveEntry.Name 直接追加到目标路径,因为绝对路径和父目录片段可能写入预期文件夹之外。标准示例使用 Path.GetFileName;需要保留目录的工作流必须解析完整路径,并验证其仍位于已批准的根目录之下。

为压缩输入大小、单个条目和总解压大小、条目数量、处理时间以及并发作业设置限制。提取到受限的临时存储中,失败后清理部分输出,在应用程序需要时扫描文件,并避免记录私有文件名或文档内容。

DWT 提取常见问题

如何在 C# 中只从 ZIP 存档提取 DWT 文件?

使用 Archive 打开 ZIP,枚举 Archive.Entries,匹配 .dwt 扩展名,并对每个已接受的目标路径调用 Extract。

Aspose.ZIP 会验证已提取 DWT 文件的内容吗?

不会。扩展名只是第一步筛选。请使用理解 DWT 内容的组件验证已还原的文件。

同样的选择模式可以用于 7Z、RAR 或 TAR 容器吗?

可以,但需要使用相应的 Aspose.ZIP 存档类打开每种容器。不同存档格式的条目类型和可用提取方法可能不同。

应如何处理重复的 DWT 文件名?

在提取之前选择规则:拒绝重复项、生成唯一名称,或保留经过验证的相对目录结构。