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

Użyj Aspose.ZIP for .NET, aby otworzyć archiwum ZIP, sprawdzić jego wpisy i przywrócić tylko pliki RVM, których potrzebuje aplikacja C#. Na tej stronie ekstrakcja oznacza odnalezienie elementów z rozszerzeniem .rvm 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 zasobów 3D, pipeline’y wizualizacji, pakiety CAD i automatyczne przetwarzanie modeli. 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 RVM 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 modeli 3D.


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 .rvm 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 RVM 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 .rvm.
  • 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 RVM 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 RVM z ZIP - C#

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

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

Filtrowanie po rozszerzeniu identyfikuje tylko kandydatów; nie dowodzi, że zawartość jest poprawna lub bezpieczna. Geometrię, materiały, odwołania i strukturę wewnętrzną należy zweryfikować komponentem 3D rozumiejącym ten format.

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 RVM

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

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

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

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 RVM?

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