Wyodrębnianie zawartości DOC z ZIP w .NET

Użyj Aspose.ZIP for .NET, aby otworzyć archiwum ZIP, sprawdzić jego wpisy i przywrócić tylko pliki DOC, których potrzebuje aplikacja C#. Na tej stronie ekstrakcja oznacza odnalezienie elementów z rozszerzeniem .doc w kontenerze ZIP i zapisanie ich w kontrolowanej lokalizacji. Aspose.ZIP przywraca plik zapisany w archiwum; nie interpretuje ani nie konwertuje jego wewnętrznej zawartości.

Selektywne wyodrębnianie jest przydatne w scenariuszach takich jak przyjmowanie dokumentów, przetwarzanie uploadów, pakiety raportów i workflow zarządzania treścią. Aplikacja może pominąć niepowiązane wpisy, sprawdzić nazwy i rozmiary oraz przekazać zatwierdzone pliki do kolejnego etapu bez rozpakowywania całego pakietu.

Jak wyodrębnić pliki DOC z ZIP w C#

Zainstaluj pakiet Aspose.ZIP for .NET i odwołaj się do namespace Aspose.Zip. Metadane archiwum są dostępne przed zapisem, więc aplikacja może sprawdzić ArchiveEntry.Name, ArchiveEntry.IsDirectory i ArchiveEntry.UncompressedSize przed zapisaniem pliki dokumentów.


Package Manager Console Command

PM> Install-Package Aspose.Zip

Po instalacji otwórz ZIP klasą Archive, przejdź po Archive.Entries, wybierz wpisy niebędące katalogami z rozszerzeniem .doc i wywołaj ArchiveEntry.Extract dla każdej zatwierdzonej lokalizacji. Przykład używa tylko końcowej nazwy pliku, dzięki czemu ścieżki z archiwum nie mogą zapisywać poza folderem docelowym.

Kroki wyodrębniania plików DOC w C#

  • Zdefiniuj ścieżkę źródłowego ZIP i utwórz izolowany katalog wyjściowy.
  • Otwórz pakiet klasą Archive.
  • Przejdź po Archive.Entries zamiast od razu rozpakowywać cały pakiet.
  • Pomiń katalogi i wybierz nazwy plików z rozszerzeniem .doc.
  • Zbuduj ścieżkę docelową pozostającą w zatwierdzonym katalogu głównym.
  • Odrzuć wpisy przekraczające skonfigurowany limit rozmiaru po rozpakowaniu.
  • Zapisz każdy zatwierdzony wpis przez ArchiveEntry.Extract.

Wymagania systemowe

  • A supported .NET runtime on Windows, Linux, or macOS.
  • Visual Studio, JetBrains Rider, Visual Studio Code, or another C# development environment.
  • Aspose.ZIP for .NET installed through NuGet or referenced as an assembly.
  • Read access to the source ZIP and write access to the destination directory.
  • Clear size, execution-time, and temporary-storage limits for untrusted archives.

Przykład C#: wyodrębnianie wybranych plików DOC z ZIP

Kod otwiera pakiet ZIP, pomija katalogi, filtruje wpisy według dozwolonego rozszerzenia i zapisuje pasujące pliki w jednym katalogu wyjściowym. Spłaszczenie ścieżek archiwum zapobiega kontrolowaniu lokalizacji docelowej przez segmenty katalogów nadrzędnych. W kodzie produkcyjnym zdefiniuj także deterministyczną regułę dla duplikatów nazw.

Wyodrębnianie plików DOC z ZIP - C#

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

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-doc");
string[] allowedExtensions = { ".doc" };
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(
                $"Entry '{fileName}' exceeds the 100 MB extraction limit.");
        }

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

Uwagi implementacyjne dla plików DOC

Filtrowanie po rozszerzeniu identyfikuje tylko kandydatów; nie dowodzi, że zawartość jest poprawna lub bezpieczna. Jeśli plik będzie wyświetlany, indeksowany lub konwertowany, zweryfikuj strukturę, kodowanie, zgodność i treść komponentem dokumentów.

The example intentionally flattens archived paths. If two approved entries have the same final file name, ArchiveEntry.Extract can overwrite an existing file. Define a policy before extraction: reject duplicates, generate unique names, or preserve a validated relative folder structure.

Bezpieczeństwo i prywatność

Traktuj przesłane ZIP, nazwy wpisów i zawartość jako niezaufane wejście. Nie łącz ArchiveEntry.Name bezpośrednio z katalogiem wyjściowym, ponieważ wpis może zawierać ścieżkę bezwzględną albo segmenty przechodzące do katalogu nadrzędnego. Przykład używa Path.GetFileName; jeśli trzeba zachować foldery, rozwiąż końcową ścieżkę i sprawdź, czy pozostaje w zatwierdzonym katalogu głównym.

Ogranicz rozmiar skompresowany, rozmiar po rozpakowaniu per wpis i łącznie, liczbę wpisów, czas przetwarzania oraz zadania równoległe. Używaj tymczasowego magazynu z ograniczonymi uprawnieniami, usuwaj wyniki częściowe po błędzie i nie loguj haseł, prywatnych nazw plików ani wyodrębnionej zawartości.

FAQ wyodrębniania plików DOC

Jak wyodrębnić tylko pliki DOC z archiwum ZIP w C#?

Otwórz ZIP klasą Archive, przejdź po Archive.Entries, przefiltruj wpisy niebędące katalogami według rozszerzenia .doc i wywołaj Extract dla każdej zweryfikowanej ścieżki wyjściowej.

Czy Aspose.ZIP waliduje wewnętrzną zawartość wyodrębnionego pliku DOC?

Nie. Aspose.ZIP przywraca plik zapisany w archiwum. Odczyt, walidacja lub konwersja zawartości należy do komponentu obsługującego dany format.

Czy ten sam wzorzec wyboru działa z kontenerami 7Z, RAR lub TAR?

Koncepcja jest taka sama, ale każdy kontener trzeba otworzyć odpowiednią klasą archiwum Aspose.ZIP. Typy wpisów i obsługiwane operacje mogą różnić się między formatami.

Jak obsłużyć zduplikowane nazwy plików DOC?

Ustal regułę przed ekstrakcją: odrzucanie duplikatów, generowanie unikalnych nazw albo zachowanie zweryfikowanej względnej struktury folderów.