Class Archive
Namespace: Aspose.Zip
Assembly: Aspose.Zip.dll (25.1.0)
Ta klasa reprezentuje plik archiwum zip. Użyj jej do tworzenia, wyodrębniania lub aktualizacji archiwów zip.
public class Archive : IArchive, IDisposable
Dziedziczenie
Implementuje
Członkowie dziedziczeni
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Konstruktory
Archive(ArchiveEntrySettings)
Inicjalizuje nową instancję klasy Aspose.Zip.Archive z opcjonalnymi ustawieniami dla jej wpisów.
public Archive(ArchiveEntrySettings newEntrySettings = null)
Parametry
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla nowo dodanych elementów Aspose.Zip.ArchiveEntry. Jeśli nie określono, używana będzie najczęściej stosowana kompresja Deflate bez szyfrowania.
Przykłady
Poniższy przykład pokazuje, jak skompresować pojedynczy plik z domyślnymi ustawieniami.
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
using (var archive = new Archive())
{
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Archive(Stream, ArchiveLoadOptions, ArchiveEntrySettings)
Inicjalizuje nową instancję klasy Aspose.Zip.Archive i tworzy listę wpisów, które można wyodrębnić z archiwum.
public Archive(Stream sourceStream, ArchiveLoadOptions loadOptions = null, ArchiveEntrySettings newEntrySettings = null)
Parametry
sourceStream
Stream
Źródło archiwum.
loadOptions
ArchiveLoadOptions
Opcje do załadowania istniejącego archiwum.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla nowo dodanych elementów Aspose.Zip.ArchiveEntry. Jeśli nie określono, używana będzie najczęściej stosowana kompresja Deflate bez szyfrowania.
Przykłady
Poniższy przykład wyodrębnia zaszyfrowane archiwum, a następnie dekompresuje pierwszy wpis do MemoryStream
.
var fs = File.OpenRead("encrypted.zip");
var extracted = new MemoryStream();
using (Archive archive = new Archive(fs, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
{
using (var decompressed = archive.Entries[0].Open())
{
byte[] b = new byte[8192];
int bytesRead;
while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
extracted.Write(b, 0, bytesRead);
}
}
Uwagi
Ten konstruktor nie dekompresuje żadnego wpisu. Zobacz metodę Aspose.Zip.ArchiveEntry.Open(System.String) do dekompresji.
Wyjątki
sourceStream
nie jest możliwe do przewijania.
Nagłówek szyfrowania dla AES jest sprzeczny z metodą kompresji WinZip.
Archive(string, ArchiveLoadOptions, ArchiveEntrySettings)
Inicjalizuje nową instancję klasy Aspose.Zip.Archive i tworzy listę wpisów, które można wyodrębnić z archiwum.
public Archive(string path, ArchiveLoadOptions loadOptions = null, ArchiveEntrySettings newEntrySettings = null)
Parametry
path
string
Pełna lub względna ścieżka do pliku archiwum.
loadOptions
ArchiveLoadOptions
Opcje do załadowania istniejącego archiwum.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla nowo dodanych elementów Aspose.Zip.ArchiveEntry. Jeśli nie określono, używana będzie najczęściej stosowana kompresja Deflate bez szyfrowania.
Przykłady
Poniższy przykład wyodrębnia zaszyfrowane archiwum, a następnie dekompresuje pierwszy wpis do MemoryStream
.
var extracted = new MemoryStream();
using (Archive archive = new Archive("encrypted.zip", new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
{
using (var decompressed = archive.Entries[0].Open())
{
byte[] b = new byte[8192];
int bytesRead;
while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
extracted.Write(b, 0, bytesRead);
}
}
Uwagi
Ten konstruktor nie dekompresuje żadnego wpisu. Zobacz metodę Aspose.Zip.ArchiveEntry.Open(System.String) do dekompresji.
Wyjątki
path
jest null.
Wywołujący nie ma wymaganych uprawnień do dostępu.
path
jest pusty, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki.
Dostęp do pliku path
jest zabroniony.
Określona path
, nazwa pliku lub obie przekraczają maksymalną długość określoną przez system. Na przykład na platformach opartych na Windows, ścieżki muszą mieć mniej niż 248 znaków, a nazwy plików muszą mieć mniej niż 260 znaków.
Plik w path
zawiera dwukropek (:) w środku ciągu.
Plik nie został znaleziony.
Określona ścieżka jest nieprawidłowa, na przykład znajduje się na nieprzypisanym dysku.
Plik jest już otwarty.
Plik jest uszkodzony.
Archive(string, string[], ArchiveLoadOptions)
Inicjalizuje nową instancję klasy Aspose.Zip.Archive z wielosegmentowego archiwum zip i tworzy listę wpisów, które można wyodrębnić z archiwum.
public Archive(string mainSegment, string[] segmentsInOrder, ArchiveLoadOptions loadOptions = null)
Parametry
mainSegment
string
Ścieżka do ostatniego segmentu wielosegmentowego archiwum z centralnym katalogiem.
Zazwyczaj ten segment ma rozszerzenie *.zip i jest mniejszy od innych.
segmentsInOrder
string[]
Ścieżki do każdego segmentu oprócz ostatniego wielosegmentowego archiwum zip w odpowiedniej kolejności.
Zazwyczaj nazywane są filename.z01, filename.z02, …, filename.z(n-1).
loadOptions
ArchiveLoadOptions
Opcje do załadowania istniejącego archiwum.
Przykłady
Ten przykład wyodrębnia do katalogu archiwum składające się z trzech segmentów.
using (Archive a = new Archive("archive.zip", new string[] { "archive.z01", "archive.z02" }))
{
a.ExtractToDirectory("destination");
}
Wyjątki
Nie można załadować nagłówków ZIP, ponieważ podane pliki są uszkodzone.
Właściwości
Entries
Pobiera wpisy typu Aspose.Zip.ArchiveEntry stanowiące archiwum.
public ReadOnlyCollection<archiveentry> Entries { get; }
Wartość właściwości
ReadOnlyCollection<ArchiveEntry>
NewEntrySettings
Ustawienia kompresji i szyfrowania używane dla nowo dodanych elementów Aspose.Zip.ArchiveEntry.
public ArchiveEntrySettings NewEntrySettings { get; }
Wartość właściwości
Metody
CreateEntries(DirectoryInfo, bool)
Dodaje do archiwum wszystkie pliki i katalogi rekurencyjnie w podanym katalogu.
public Archive CreateEntries(DirectoryInfo directory, bool includeRootDirectory = true)
Parametry
directory
DirectoryInfo
Katalog do skompresowania.
includeRootDirectory
bool
Określa, czy dołączyć sam katalog główny, czy nie.
Zwraca
Archiwum z utworzonymi wpisami.
Przykłady
using (Archive archive = new Archive())
{
DirectoryInfo folder = new DirectoryInfo("C:\folder");
archive.CreateEntries(folder);
archive.Save("folder.zip");
}
Wyjątki
Ścieżka do directory
jest nieprawidłowa, na przykład znajduje się na nieprzypisanym dysku.
Wywołujący nie ma wymaganych uprawnień do dostępu do directory
.
CreateEntries(string, bool)
Dodaje do archiwum wszystkie pliki i katalogi rekurencyjnie w podanym katalogu.
public Archive CreateEntries(string sourceDirectory, bool includeRootDirectory = true)
Parametry
sourceDirectory
string
Katalog do skompresowania.
includeRootDirectory
bool
Określa, czy dołączyć sam katalog główny, czy nie.
Zwraca
Archiwum z utworzonymi wpisami.
Przykłady
using (Archive archive = new Archive())
{
archive.CreateEntries("C:\folder");
archive.Save("folder.zip");
}
CreateEntry(string, string, bool, ArchiveEntrySettings)
Tworzy pojedynczy wpis w archiwum.
public ArchiveEntry CreateEntry(string name, string path, bool openImmediately = false, ArchiveEntrySettings newEntrySettings = null)
Parametry
name
string
Nazwa wpisu.
path
string
Pełna nazwa nowego pliku lub względna nazwa pliku do skompresowania.
openImmediately
bool
Prawda, jeśli plik ma być otwarty natychmiast, w przeciwnym razie plik zostanie otwarty po zapisaniu archiwum.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla dodanego elementu Aspose.Zip.ArchiveEntry.
Zwraca
Instancja wpisu zip.
Przykłady
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
using (var archive = new Archive())
{
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Uwagi
Nazwa wpisu jest ustawiana wyłącznie w parametrze name
. Nazwa pliku podana w parametrze path
nie wpływa na nazwę wpisu.
Jeśli plik jest otwarty natychmiast z parametrem openImmediately
, zostaje zablokowany do momentu zapisania archiwum.
Wyjątki
path
jest null.
Wywołujący nie ma wymaganych uprawnień do dostępu.
path
jest pusty, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki.
Dostęp do pliku path
jest zabroniony.
Określona path
, nazwa pliku lub obie przekraczają maksymalną długość określoną przez system. Na przykład na platformach opartych na Windows, ścieżki muszą mieć mniej niż 248 znaków, a nazwy plików muszą mieć mniej niż 260 znaków.
Plik w path
zawiera dwukropek (:) w środku ciągu.
CreateEntry(string, Stream, ArchiveEntrySettings)
Tworzy pojedynczy wpis w archiwum.
public ArchiveEntry CreateEntry(string name, Stream source, ArchiveEntrySettings newEntrySettings = null)
Parametry
name
string
Nazwa wpisu.
source
Stream
Strumień wejściowy dla wpisu.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla dodanego elementu Aspose.Zip.ArchiveEntry.
Zwraca
Instancja wpisu zip.
Przykłady
using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
{
archive.CreateEntry("data.bin", new MemoryStream(new byte[] {0x00, 0xFF} ));
archive.Save("archive.zip");
}
CreateEntry(string, FileInfo, bool, ArchiveEntrySettings)
Tworzy pojedynczy wpis w archiwum.
public ArchiveEntry CreateEntry(string name, FileInfo fileInfo, bool openImmediately = false, ArchiveEntrySettings newEntrySettings = null)
Parametry
name
string
Nazwa wpisu.
fileInfo
FileInfo
Metadane pliku do skompresowania.
openImmediately
bool
Prawda, jeśli plik ma być otwarty natychmiast, w przeciwnym razie plik zostanie otwarty po zapisaniu archiwum.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla dodanego elementu Aspose.Zip.ArchiveEntry.
Zwraca
Instancja wpisu zip.
Przykłady
Tworzenie archiwum z wpisami szyfrowanymi różnymi metodami szyfrowania i hasłami.
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
FileInfo fi1 = new FileInfo("data1.bin");
FileInfo fi2 = new FileInfo("data2.bin");
FileInfo fi3 = new FileInfo("data3.bin");
using (var archive = new Archive())
{
archive.CreateEntry("entry1.bin", fi1, false, new ArchiveEntrySettings(new DeflateCompressionSettings(), new TraditionalEncryptionSettings("pass1")));
archive.CreateEntry("entry2.bin", fi2, false, new ArchiveEntrySettings(new DeflateCompressionSettings(), new AesEcryptionSettings("pass2", EncryptionMethod.AES128)));
archive.CreateEntry("entry3.bin", fi3, false, new ArchiveEntrySettings(new DeflateCompressionSettings(), new AesEcryptionSettings("pass3", EncryptionMethod.AES256)));
archive.Save(zipFile);
}
}
Uwagi
Nazwa wpisu jest ustawiana wyłącznie w parametrze name
. Nazwa pliku podana w parametrze fileInfo
nie wpływa na nazwę wpisu.
Jeśli plik jest otwarty natychmiast z parametrem openImmediately
, zostaje zablokowany do momentu zapisania archiwum.
Wyjątki
fileInfo
jest tylko do odczytu lub jest katalogiem.
Określona ścieżka jest nieprawidłowa, na przykład znajduje się na nieprzypisanym dysku.
Plik jest już otwarty.
CreateEntry(string, Stream, ArchiveEntrySettings, FileSystemInfo)
Tworzy pojedynczy wpis w archiwum.
public ArchiveEntry CreateEntry(string name, Stream source, ArchiveEntrySettings newEntrySettings, FileSystemInfo fileInfo)
Parametry
name
string
Nazwa wpisu.
source
Stream
Strumień wejściowy dla wpisu.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla dodanego elementu Aspose.Zip.ArchiveEntry.
fileInfo
FileSystemInfo
Metadane pliku lub folderu do skompresowania.
Zwraca
Instancja wpisu zip.
Przykłady
Tworzenie archiwum z szyfrowanym wpisem.
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
using (var archive = new Archive())
{
archive.CreateEntry("entry1.bin", new MemoryStream(new byte[] {0x00, 0xFF} ), new ArchiveEntrySettings(new DeflateCompressionSettings(), new TraditionalEncryptionSettings("pass1")), new FileInfo("data1.bin"));
archive.Save(zipFile);
}
}
Uwagi
Nazwa wpisu jest ustawiana wyłącznie w parametrze name
. Nazwa pliku podana w parametrze fileInfo
nie wpływa na nazwę wpisu.
fileInfo
może odnosić się do System.IO.DirectoryInfo, jeśli wpis jest katalogiem.
Wyjątki
Zarówno source
, jak i fileInfo
są null lub source
jest null, a fileInfo
odnosi się do katalogu.
CreateEntry(string, Func<stream>, ArchiveEntrySettings)
Tworzy pojedynczy wpis w archiwum.
public ArchiveEntry CreateEntry(string name, Func<stream> streamProvider, ArchiveEntrySettings newEntrySettings = null)
Parametry
name
string
Nazwa wpisu.
streamProvider
Func<Stream>
Metoda dostarczająca strumień wejściowy dla wpisu.
newEntrySettings
ArchiveEntrySettings
Ustawienia kompresji i szyfrowania używane dla dodanego elementu Aspose.Zip.ArchiveEntry.
Zwraca
Instancja wpisu zip.
Przykłady
Tworzenie archiwum z szyfrowanym wpisem.
System.Func<Stream> provider = delegate(){ return new MemoryStream(new byte[]{0xFF, 0x00}); };
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
using (var archive = new Archive())
{
archive.CreateEntry("entry1.bin", provider, new ArchiveEntrySettings(new DeflateCompressionSettings(), new TraditionalEncryptionSettings("pass1"))));
archive.Save(zipFile);
}
}
Uwagi
Ta metoda jest przeznaczona dla .NET Framework 4.0 i nowszych oraz dla wersji .NET Standard 2.0.
DeleteEntry(ArchiveEntry)
Usuwa pierwsze wystąpienie konkretnego wpisu z listy wpisów.
public Archive DeleteEntry(ArchiveEntry entry)
Parametry
entry
ArchiveEntry
Wpis do usunięcia z listy wpisów.
Zwraca
Archiwum z usuniętym wpisem.
Przykłady
Oto jak możesz usunąć wszystkie wpisy oprócz ostatniego:
using (var archive = new Archive("archive.zip"))
{
while (archive.Entries.Count > 1)
archive.DeleteEntry(archive.Entries[0]);
archive.Save("last_entry.zip");
}
Wyjątki
Archiwum zostało usunięte.
DeleteEntry(int)
Usuwa wpis z listy wpisów według indeksu.
public Archive DeleteEntry(int entryIndex)
Parametry
entryIndex
int
Indeks zerowy wpisu do usunięcia.
Zwraca
Archiwum z usuniętym wpisem.
Przykłady
using (var archive = new TarArchive("two_files.zip"))
{
archive.DeleteEntry(0);
archive.Save("single_file.zip");
}
Wyjątki
Archiwum zostało usunięte.
entryIndex
jest mniejszy niż 0 lub entryIndex
jest równy lub większy niż liczba Entries
.
Dispose()
Wykonuje zadania zdefiniowane przez aplikację związane z zwalnianiem, uwalnianiem lub resetowaniem niezarządzanych zasobów.
public void Dispose()
Dispose(bool)
Wykonuje zadania zdefiniowane przez aplikację związane z zwalnianiem, uwalnianiem lub resetowaniem niezarządzanych zasobów.
protected virtual void Dispose(bool disposing)
Parametry
disposing
bool
Określa, czy zarządzane zasoby powinny być usunięte.
ExtractToDirectory(string)
Wyodrębnia wszystkie pliki w archiwum do podanego katalogu.
public void ExtractToDirectory(string destinationDirectory)
Parametry
destinationDirectory
string
Ścieżka do katalogu, w którym mają zostać umieszczone wyodrębnione pliki.
Przykłady
using (var archive = new Archive("archive.zip"))
{
archive.ExtractToDirectory("C:\extracted");
}
Uwagi
Jeśli katalog nie istnieje, zostanie utworzony.
Wyjątki
destinationDirectory
jest null.
Określona ścieżka, nazwa pliku lub obie przekraczają maksymalną długość określoną przez system. Na przykład na platformach opartych na Windows, ścieżki muszą mieć mniej niż 248 znaków, a nazwy plików muszą mieć mniej niż 260 znaków.
Wywołujący nie ma wymaganych uprawnień do dostępu do istniejącego katalogu.
Jeśli katalog nie istnieje, ścieżka zawiera znak dwukropka (:) niebędący częścią etykiety dysku (“C:").
destinationDirectory
jest ciągiem o zerowej długości, zawiera tylko białe znaki lub zawiera jeden lub więcej nieprawidłowych znaków. Możesz zapytać o nieprawidłowe znaki, używając metody System.IO.Path.GetInvalidPathChars.
-lub- ścieżka jest poprzedzona lub zawiera tylko znak dwukropka (:).
Katalog określony przez ścieżkę jest plikiem. -lub- Nazwa sieci nie jest znana.
Podano niewłaściwe hasło. - lub - Archiwum jest uszkodzone.
Save(Stream, ArchiveSaveOptions)
Zapisuje archiwum do podanego strumienia.
public void Save(Stream outputStream, ArchiveSaveOptions saveOptions = null)
Parametry
outputStream
Stream
Strumień docelowy.
saveOptions
ArchiveSaveOptions
Opcje zapisywania archiwum.
Przykłady
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
using (var archive = new Archive())
{
archive.CreateEntry("entry.bin", "data.bin");
archive.Save(zipFile);
}
}
Uwagi
outputStream
musi być zapisywalny.
Wyjątki
outputStream
nie jest zapisywalny.
Archiwum zostało usunięte.
Save(string, ArchiveSaveOptions)
Zapisuje archiwum do podanego pliku docelowego.
public void Save(string destinationFileName, ArchiveSaveOptions saveOptions = null)
Parametry
destinationFileName
string
Ścieżka archiwum do utworzenia. Jeśli podana nazwa pliku wskazuje na istniejący plik, zostanie on nadpisany.
saveOptions
ArchiveSaveOptions
Opcje zapisywania archiwum.
Przykłady
using (var archive = new Archive())
{
archive.CreateEntry("entry.bin", "data.bin");
archive.Save("archive.zip", new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
Uwagi
Możliwe jest zapisanie archiwum w tej samej ścieżce, z której zostało załadowane. Jednak nie jest to zalecane, ponieważ podejście to wykorzystuje kopiowanie do pliku tymczasowego.
Wyjątki
destinationFileName
jest null.
Wywołujący nie ma wymaganych uprawnień do dostępu.
destinationFileName
jest pusty, zawiera tylko białe znaki lub zawiera nieprawidłowe znaki.
Dostęp do pliku destinationFileName
jest zabroniony.
Określona destinationFileName
, nazwa pliku lub obie przekraczają maksymalną długość określoną przez system.
Na przykład na platformach opartych na Windows, ścieżki muszą mieć mniej niż 248 znaków, a nazwy plików muszą mieć mniej niż 260 znaków.
Plik w destinationFileName
zawiera dwukropek (:) w środku ciągu.
Plik nie został znaleziony.
Określona ścieżka jest nieprawidłowa, na przykład znajduje się na nieprzypisanym dysku.
Plik jest już otwarty.
SaveSplit(string, SplitArchiveSaveOptions)
Zapisuje wielosegmentowe archiwum do podanego katalogu docelowego.
public void SaveSplit(string destinationDirectory, SplitArchiveSaveOptions options)
Parametry
destinationDirectory
string
Ścieżka do katalogu, w którym mają zostać utworzone segmenty archiwum.
options
SplitArchiveSaveOptions
Opcje zapisywania archiwum, w tym nazwa pliku.
Przykłady
using (Archive archive = new Archive())
{
archive.CreateEntry("entry.bin", "data.bin");
archive.SaveSplit(@"C:\Folder", new SplitArchiveSaveOptions("volume", 65536));
}
Uwagi
Ta metoda tworzy kilka (n
) plików filename.z01, filename.z02, ..., filename.z(n-1), filename.zip.
Nie można przekształcić istniejącego archiwum w wielosegmentowe.
Wyjątki
To archiwum zostało otwarte z istniejącego źródła.
To archiwum jest zarówno skompresowane metodą XZ, jak i szyfrowane.
destinationDirectory
jest null.
Wywołujący nie ma wymaganych uprawnień do dostępu do katalogu.
destinationDirectory
zawiera nieprawidłowe znaki, takie jak “, >, < lub |.
Określona ścieżka przekracza maksymalną długość określoną przez system.
Archiwum zostało usunięte.