.NET에서 ZIP의 VSD 콘텐츠 추출

Aspose.ZIP for .NET을 사용하면 ZIP 아카이브를 열고 엔트리를 검사한 뒤 C# 애플리케이션에 필요한 VSD 파일만 복원할 수 있습니다. 이 페이지에서 추출은 ZIP 컨테이너 안에 저장된 .vsd 확장자 항목을 찾아 제어된 대상 폴더에 저장하는 것을 의미합니다. Aspose.ZIP은 아카이브에 저장된 파일을 복원하지만 파일 내부 콘텐츠를 해석하거나 변환하지는 않습니다.

선택적 추출은 프로세스 다이어그램, 조직도, 기술 스키마, 엔터프라이즈 문서 패키지에 유용합니다. 애플리케이션은 관련 없는 엔트리를 건너뛰고 이름과 크기를 확인한 다음, 전체 패키지를 풀지 않고 승인된 파일만 다음 처리 단계로 전달할 수 있습니다.

C#으로 ZIP에서 VSD 파일을 추출하는 방법

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를 열거한 다음, 확장자가 .vsd인 비디렉터리 엔트리를 선택하고 승인된 각 대상에 ArchiveEntry.Extract를 호출합니다. 예제는 최종 파일 이름만 사용하므로 아카이브 안의 경로가 대상 폴더 밖에 쓰는 일을 방지합니다.

C#에서 VSD 파일을 추출하는 단계

  • 원본 ZIP 경로를 지정하고 격리된 출력 디렉터리를 만듭니다.
  • Archive 클래스로 패키지를 엽니다.
  • 전체 패키지를 바로 추출하지 말고 Archive.Entries를 열거합니다.
  • 디렉터리는 건너뛰고 .vsd 확장자의 파일 이름만 선택합니다.
  • 승인된 출력 루트 안에 남는 대상 경로를 만듭니다.
  • 설정된 추출 후 크기 제한을 초과하는 엔트리를 거부합니다.
  • 승인된 각 엔트리를 ArchiveEntry.Extract로 저장합니다.

시스템 요구 사항

예제를 실행하기 전에 환경에 다음 항목이 있는지 확인하세요:

  • Windows, Linux 또는 macOS의 지원되는 .NET 런타임.
  • Visual Studio, JetBrains Rider, Visual Studio Code 또는 다른 C# 개발 환경.
  • NuGet으로 설치했거나 어셈블리로 참조한 Aspose.ZIP for .NET.
  • 원본 ZIP에 대한 읽기 권한과 대상 디렉터리에 대한 쓰기 권한.
  • 신뢰할 수 없는 아카이브에 적용할 명확한 크기, 실행 시간, 임시 저장소 제한.

C# 예제: ZIP에서 선택한 VSD 파일 추출

이 코드는 ZIP 패키지를 열고 디렉터리를 제외한 뒤 허용된 확장자로 엔트리를 필터링하여 일치하는 파일을 하나의 출력 디렉터리에 씁니다. 아카이브 경로를 버리면 상위 디렉터리 세그먼트가 대상 위치를 제어하지 못합니다. 운영 코드에서는 중복 파일 이름에 대한 결정적 규칙도 정의해야 합니다.

ZIP에서 VSD 파일 추출 - C#

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

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-vsd");
string[] allowedExtensions = { ".vsd" };
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);
    }
}

VSD 파일 추출 구현 참고 사항

확장자 기반 필터링은 후보 파일만 식별할 뿐, 콘텐츠가 유효하거나 안전하다는 것을 보장하지 않습니다. 페이지, 셰이프, 스텐실, 템플릿 및 내부 참조는 렌더링이나 변환 전에 다이어그램 처리 구성 요소로 확인해야 합니다.

이 예제는 아카이브 안의 경로를 의도적으로 평탄화합니다. 승인된 두 엔트리가 같은 최종 파일 이름을 가지면 ArchiveEntry.Extract가 기존 파일을 덮어쓸 수 있습니다. 추출 전에 중복 거부, 고유 이름 생성, 검증된 상대 폴더 구조 유지 같은 정책을 정하세요. 병렬 작업의 출력이 섞이지 않도록 작업마다 별도 대상을 사용합니다.

보안 및 개인정보 보호 고려 사항

업로드된 ZIP, 엔트리 이름, 콘텐츠는 신뢰할 수 없는 입력으로 취급하세요. ArchiveEntry.Name을 출력 디렉터리와 직접 결합하지 마세요. 엔트리에 절대 경로나 상위 디렉터리로 이동하는 세그먼트가 포함될 수 있습니다. 이 예제는 Path.GetFileName을 사용합니다. 폴더를 보존해야 한다면 최종 경로를 해석하고 승인된 루트 안에 남는지 확인하세요.

압축 크기, 엔트리별 및 전체 추출 후 크기, 엔트리 수, 처리 시간, 병렬 작업 수를 제한합니다. 권한이 제한된 임시 저장소를 사용하고, 실패 후 부분 출력을 제거하며, 비밀번호, 비공개 파일 이름 또는 추출된 콘텐츠를 로그에 기록하지 마세요.

VSD 파일 추출 FAQ

C#에서 ZIP 아카이브의 VSD 파일만 추출하려면 어떻게 하나요?

Archive로 ZIP을 열고 Archive.Entries를 열거한 다음, 비디렉터리 엔트리를 .vsd 확장자로 필터링하고 검증된 각 출력 경로에 Extract를 호출합니다.

Aspose.ZIP이 추출된 VSD 파일의 내부 콘텐츠를 검증하나요?

아니요. Aspose.ZIP은 아카이브에 저장된 파일을 복원합니다. 콘텐츠 읽기, 검증 또는 변환은 해당 형식을 지원하는 전용 구성 요소의 역할입니다.

같은 선택 패턴을 7Z, RAR 또는 TAR 컨테이너에도 사용할 수 있나요?

개념은 같지만 각 컨테이너는 해당 Aspose.ZIP 아카이브 클래스로 열어야 합니다. 엔트리 형식과 지원되는 추출 작업은 형식마다 다를 수 있습니다.

중복된 VSD 파일 이름은 어떻게 처리해야 하나요?

추출 전에 규칙을 정하세요. 중복 거부, 고유 이름 생성, 검증된 상대 폴더 구조 유지가 일반적인 선택지입니다.