Εξαγωγή αρχείων DOCX από ZIP σε .NET

Χρησιμοποιήστε το Aspose.ZIP for .NET για να ελέγξετε ένα ZIP archive και να επαναφέρετε μόνο τα αρχεία DOCX που χρειάζεται η C# εφαρμογή σας. Σε αυτή τη σελίδα, extraction σημαίνει επιλογή των κατάλληλων αρχείων από ZIP container και εγγραφή τους σε ελεγχόμενο destination directory. Το Aspose.ZIP δεν ερμηνεύει ούτε μετατρέπει το εσωτερικό περιεχόμενο του αρχείου.

Η selective extraction ταιριάζει σε document ingestion, records processing, office automation, conversion queues και uploaded business packages. Η εφαρμογή μπορεί να αγνοεί μη σχετικά entries, να επιβάλλει output και resource policies και να περνά approved files στο επόμενο service χωρίς να αποσυμπιέζει ολόκληρο το archive.

Εξαγωγή αρχείων DOCX από ZIP με C#

Εγκαταστήστε το Aspose.ZIP package for .NET και εισαγάγετε το namespace Aspose.Zip. Τα archive metadata είναι διαθέσιμα πριν γραφτεί οτιδήποτε, ώστε η εφαρμογή να αξιολογεί ArchiveEntry.Name, ArchiveEntry.IsDirectory και ArchiveEntry.UncompressedSize ως μέρος της acceptance policy.


Package Manager Console Command

PM> Install-Package Aspose.Zip

Ανοίξτε το ZIP με Archive, διατρέξτε το Archive.Entries, επιλέξτε entries με την επέκταση .docx και καλέστε ArchiveEntry.Extract για κάθε εγκεκριμένο destination. Το παράδειγμα μειώνει τα archived paths στο τελικό filename, ώστε τα entries να μην μπορούν να βγουν από το target directory.

Βήματα για επαναφορά αρχείων DOCX σε C#

  • Επιλύστε το source ZIP path και δημιουργήστε isolated output directory.
  • Ανοίξτε το package με την class Archive.
  • Διατρέξτε το Archive.Entries αντί να επεκτείνετε κάθε item.
  • Επιλέξτε entries των οποίων το τελικό filename χρησιμοποιεί την επέκταση .docx.
  • Δημιουργήστε destination path που παραμένει κάτω από το approved output root.
  • Απορρίψτε entries που υπερβαίνουν το configured expanded-size limit.
  • Αποθηκεύστε κάθε accepted item με ArchiveEntry.Extract.

Απαιτήσεις συστήματος

Πριν εκτελέσετε το παράδειγμα, βεβαιωθείτε ότι το περιβάλλον περιλαμβάνει:

  • Υποστηριζόμενο .NET runtime σε Windows, Linux ή macOS.
  • Visual Studio, JetBrains Rider, Visual Studio Code ή άλλο C# development environment.
  • Aspose.ZIP for .NET εγκατεστημένο μέσω NuGet ή referenced ως assembly.
  • Read access στο source archive και write access στο destination directory.
  • Storage και execution limits κατάλληλα για μη αξιόπιστη compressed input.

Παράδειγμα C#: επιλογή αρχείων DOCX μέσα σε ZIP archive

Ο κώδικας ανοίγει ένα ZIP package, φιλτράρει non-directory entries με βάση την approved extension και γράφει τα matching files σε ένα output directory. Το flattening των archived paths κρατά το παράδειγμα σύντομο και αποτρέπει parent-directory segments από το να ελέγξουν το destination. Ο production κώδικας πρέπει επίσης να ορίζει deterministic policy για duplicate output names.

Εξαγωγή αρχείων DOCX από ZIP - C#

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

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-docx");
string[] allowedExtensions = { ".docx" };
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}' υπερβαίνει το όριο εξαγωγής των 100 MB.");
        }

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

Σημειώσεις υλοποίησης για DOCX packages

Το DOCX μπορεί να είναι εσωτερικά package-based, αλλά αυτό το παράδειγμα το αντιμετωπίζει ως αδιαφανές αρχείο μέσα σε ένα εξωτερικό ZIP αρχείο. Η επαναφορά του DOCX στοιχείου και η αποσυμπίεση της εσωτερικής του δομής είναι διαφορετικά βήματα. Κρατήστε τα ξεχωριστά, ώστε να μη μπερδευτούν paths και κανόνες επικύρωσης.

Η σωστή επέκταση δεν αποδεικνύει ότι το έγγραφο είναι αναγνώσιμο ή ότι συμμορφώνεται με την αναμενόμενη παραλλαγή. Επικυρώστε το επαναφερόμενο αρχείο με το document-processing component του επόμενου βήματος.

Το παράδειγμα μειώνει τα archived paths σε απλά ονόματα αρχείων. Αν δύο αποδεκτά entries έχουν το ίδιο τελικό όνομα, το ArchiveEntry.Extract μπορεί να αντικαταστήσει υπάρχον output file. Ορίστε ξεκάθαρο κανόνα σύγκρουσης: απόρριψη duplicates, δημιουργία μοναδικών ονομάτων ή διατήρηση validated relative folder structure. Χρησιμοποιήστε ξεχωριστό destination για κάθε job, ώστε παράλληλα requests να μη μπερδεύουν αποτελέσματα.

Ζητήματα ασφάλειας και απορρήτου

Αντιμετωπίστε archive names και payloads ως μη αξιόπιστα. Μην προσθέτετε ποτέ το ArchiveEntry.Name απευθείας στο destination path, επειδή absolute paths και parent-directory segments μπορούν να γράψουν έξω από τον προβλεπόμενο φάκελο. Το standard παράδειγμα χρησιμοποιεί Path.GetFileName; workflows που διατηρούν directories πρέπει να επιλύουν το full path και να επιβεβαιώνουν ότι παραμένει κάτω από το approved root.

Ορίστε limits για compressed input size, per-entry και total expanded size, entry count, processing time και concurrent jobs. Εξαγάγετε σε restricted temporary storage, καθαρίστε partial output μετά από failures, σαρώστε αρχεία όταν το απαιτεί η εφαρμογή και αποφύγετε να γράφετε σε logs private filenames ή file contents.

FAQ εξαγωγής DOCX

Πώς εξάγω μόνο αρχεία DOCX από ZIP archive σε C#;

Ανοίξτε το ZIP με Archive, διατρέξτε το Archive.Entries, φιλτράρετε matching entries με βάση την επέκταση .docx και καλέστε Extract για κάθε accepted destination path.

Επικυρώνει το Aspose.ZIP το περιεχόμενο ενός εξαγμένου αρχείου DOCX;

Όχι. Η επέκταση είναι μόνο ένα πρώτο φίλτρο. Επικυρώστε το επαναφερόμενο αρχείο με component που κατανοεί περιεχόμενο DOCX.

Μπορεί το ίδιο selection pattern να χρησιμοποιηθεί με 7Z, RAR ή TAR containers;

Ναι, αλλά κάθε container πρέπει να ανοίγει με την αντίστοιχη Aspose.ZIP archive class. Οι entry types και οι διαθέσιμες extraction methods μπορεί να διαφέρουν ανά archive format.

Πώς πρέπει να χειρίζονται τα duplicate DOCX filenames;

Ορίστε τον κανόνα πριν από την extraction: απόρριψη duplicates, δημιουργία μοναδικών ονομάτων ή διατήρηση validated relative folder structure.