Extrakce obsahu FileGDB ze ZIP v .NET
Použijte Aspose.ZIP for .NET k obnovení kompletní datové sady FileGDB z archivu ZIP. FileGDB není jeden samostatný soubor, ale adresář .gdb s více souvisejícími soubory; extrakce zde proto znamená znovu vytvořit validovanou relativní strukturu a zapsat všechny členy potřebné pro datovou sadu.Hodí se to pro GIS importy, mapové služby a prostorové ETL. Soubory neslučujte do jedné ploché složky, protože by geodatabáze mohla být nepoužitelná.
Jak extrahovat soubory FileGDB ze ZIP pomocí C#
Nainstalujte balíček Aspose.ZIP for .NET a přidejte namespace Aspose.Zip. Metadata položek jsou dostupná před zápisem, takže aplikace může zkontrolovat ArchiveEntry.Name, ArchiveEntry.IsDirectory a ArchiveEntry.UncompressedSize ještě před extrakcí.
Package Manager Console Command
PM> Install-Package Aspose.Zip
Otevřete ZIP pomocí Archive, najděte položky pod adresářem končícím na .gdb, ověřte každou výslednou cestu a extrahujte celý adresářový strom.
Postup obnovení souborů FileGDB v C#
- Určete cestu ke zdrojovému ZIP a vytvořte izolovaný výstupní adresář.
- Otevřete balíček třídou Archive.
- Projděte Archive.Entries místo okamžité extrakce všeho.
- Vyberte položky odpovídající .gdb nebo pravidlu daného formátu.
- Sestavte cílovou cestu, která zůstane pod schváleným kořenem.
- Odmítněte položky překračující nastavený limit po rozbalení.
- Každou schválenou položku uložte pomocí ArchiveEntry.Extract.
Požadavky na systém
Před spuštěním příkladu ověřte, že prostředí obsahuje:
- Podporovaný runtime .NET ve Windows, Linuxu nebo macOS.
- Visual Studio, Rider, VS Code nebo jiné prostředí pro vývoj v C#.
- Aspose.ZIP for .NET nainstalovaný přes NuGet nebo přidaný jako assembly reference.
- Oprávnění ke čtení zdrojového ZIP a k zápisu do cílového adresáře.
- Jasné limity velikosti, času a dočasného úložiště pro nedůvěryhodné vstupy.
Příklad C#: výběr souborů FileGDB v archivu ZIP
Ukázka otevře balíček ZIP, filtruje nedirektářové položky a zapíše odpovídající soubory do jednoho cíle nebo do bezpečné struktury podle potřeb formátu. V produkci definujte také deterministické pravidlo pro duplicitní názvy.
Extrakce souborů FileGDB ze ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("geodata.zip");
string outputDirectory = Path.GetFullPath("extracted-filegdb");
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
string normalizedName = entry.Name.Replace('\\', '/');
int marker = normalizedName.IndexOf(".gdb/", StringComparison.OrdinalIgnoreCase);
if (marker < 0) continue;
string relativePath = normalizedName;
string destinationPath = Path.GetFullPath(
Path.Combine(outputDirectory, relativePath.Replace('/', Path.DirectorySeparatorChar)));
string pathFromRoot = Path.GetRelativePath(outputDirectory, destinationPath);
if (Path.IsPathRooted(pathFromRoot)
|| pathFromRoot.Equals("..", StringComparison.Ordinal)
|| pathFromRoot.StartsWith(
".." + Path.DirectorySeparatorChar,
StringComparison.Ordinal))
{
throw new InvalidDataException("Archive entry resolves outside the output directory.");
}
if (entry.IsDirectory)
{
Directory.CreateDirectory(destinationPath);
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Entry '{entry.Name}' exceeds the 100 MB extraction limit.");
}
Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!);
entry.Extract(destinationPath);
}
}
Produkční poznámky k souborům FileGDB
Vnitřní struktura FileGDB musí zůstat zachovaná. Extrakce jediné položky nebo zploštění cest může datovou sadu poškodit.Po obnovení ověřte schéma, souřadnicový systém a vrstvy pomocí vhodné GIS komponenty.
Bezpečnost a soukromí
S názvy položek i obsahem archivu zacházejte jako s nedůvěryhodným vstupem. Nepřipojujte ArchiveEntry.Name přímo k výstupnímu adresáři; položka může obsahovat absolutní cestu nebo průchod do nadřazené složky. Pokud zachováváte adresáře, vyhodnoťte výslednou cestu a ověřte, že zůstává pod schváleným kořenem.Nastavte limity pro komprimovanou velikost, velikost po extrakci, počet položek, dobu běhu a souběžnost. Použijte omezené dočasné úložiště, po chybách uklízejte výstup a nelogujte soukromé názvy souborů, hesla ani obsah.
FAQ k extrakci FileGDB
Jak z archivu ZIP v C# extrahovat pouze soubory FileGDB?
Otevřete ZIP pomocí Archive, projděte Archive.Entries, použijte podmínku .gdb nebo pravidlo formátu a zavolejte Extract pro každou schválenou výstupní cestu.
Ověřuje Aspose.ZIP obsah souboru FileGDB?
Ne. Aspose.ZIP obnoví soubor z archivu. Čtení, validace nebo převod obsahu FileGDB patří komponentě specializované na daný formát.
Lze stejný postup použít také pro 7Z, RAR nebo TAR?
Ano na úrovni principu, ale každý kontejner je nutné otevřít odpovídající třídou Aspose.ZIP. Typy položek a dostupné operace se mohou lišit.
Jak řešit duplicitní názvy souborů FileGDB?
Pravidlo určete před extrakcí: duplicitu odmítnout, vygenerovat jedinečný název nebo zachovat validovanou relativní adresářovou strukturu.
Související návody pro extrakci GIS souborů
Projděte si stránky pro C# pro mapová a geoprostorová data distribuovaná v archivech.