VB 5/6-Tipp 0579: Mehrere Dateien in einer archivieren
von Simon Taddiken
Beschreibung
Dieses Beispiel zeigt, wie man mehrere Dateien hintereinander in einer einzigen Datei speichern kann. Dabei werden die Daten nicht komprimiert. Allerdings bieten solche Formate den Vorteil, dass sie am Stück aus dem Internet geladen werden können. Dies ist z.B. sinnvoll, wenn man eine Updatefunktion für ein Programm erstellen möchte.
Update durch ThomJ: Nun wird die Anzahl der Dateien auch gespeichert.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "cmdExtractIt" ' Steuerelement: Schaltfläche "cmdPackIt" Option Explicit ' VORSICHT: ' Dieser Tipp zeigt eine /sehr einfache/ Möglichkeit, eine Art ' Dateiarchiv zu erstellen. Das ist für kleine Dateipakete ' durchaus ausreichend, aber sobald es entweder sehr viele ' oder sehr grosse Dateien sind, sollte man sie niemals ' alle gleichzeitig im RAM ablegen müssen! ' Gepackt werden bei diesem Beispiel die Dateien ' "bild.bmp" und "textdatei.txt" im Programmordner. Private Type PackFile ' Type für die einzelnen Dateien FileName As String ' Hier steht der Dateiname der Datei Contents As String ' Hier der Inhalt End Type Private Type myPack ' Type für die gepackte Datei Files() As PackFile ' Ein Array für die Dateien UBoundFiles As Long ' und die Obergrenze des Array End Type Private APath As String Private Sub cmdPackIt_Click() Dim Files(1) As String ' Wir haben 2 Dateien zum packen Files(0) = APath & "textdatei.txt" Files(1) = APath & "bild.bmp" Call PackIt(Files(), APath & "gepackt.sz") End Sub Private Sub cmdExtractIt_Click() Call ExtractIt(APath & "gepackt.sz", APath) End Sub ' Funktion zum Packen Private Function PackIt(Files() As String, DestFile As String) Dim i As Long Dim FN As Integer Dim zw As String Dim Pack As myPack Me.MousePointer = vbHourglass Pack.UBoundFiles = UBound(Files) ' Anzahl der Files ReDim Pack.Files(Pack.UBoundFiles) For i = 0 To UBound(Files()) FN = FreeFile Open Files(i) For Binary As #FN ' Einzelne Dateien öffnen, zw = Space(LOF(FN)) ' String vordimensionieren, Get #FN, , zw ' einlesen, Pack.Files(i).Contents = zw ' Inhalt in den UDT packen, Pack.Files(i).FileName = Files(i) ' den FileNamen ebenfalls Close #FN Next i FN = FreeFile Open DestFile For Binary As #FN ' Ziel Datei öffnen Put #FN, , Pack ' und den UDT speichern Close #FN Me.MousePointer = vbDefault End Function 'Funktion zum entpacken Private Function ExtractIt(Source As String, DestPath As String) Dim i As Long Dim FN As Long Dim UBF As Long Dim Pack As myPack FN = FreeFile Open Source For Binary As #FN ' Gepackte Datei öffnen, Get #FN, LOF(FN) - 3, UBF ' Anzahl der Files auslesen, Close ReDim Pack.Files(UBF) ' UDT dimensionieren, Open Source For Binary As #FN Get #FN, , Pack ' Inhalt in den UDT Close For i = 0 To UBF ' Einzelne Dateien, FN = FreeFile Open DestPath & GetFileName(Pack.Files(i).FileName) _ For Binary As #FN ' öffnen/erstellen, Put #FN, , Pack.Files(i).Contents ' Inhalt speichern Close #FN Next i End Function 'Funktion um den Dateinamen aus dem Pfad zu "extrahieren" Private Function GetFileName(xFile As String) As String Dim lastbs As Long ' Position des letzten Backslashes (\) lastbs = InStrRev(xFile, "\") GetFileName = Mid(xFile, lastbs + 1) End Function Private Sub Form_Load() APath = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 5 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von ramm:stein:bruch am 18.08.2009 um 19:22
Ganz feine Sache.
Kann man das auch machen, wenn zwei Bedingungen erfüllt sind:
1. alle .txt_Dateien in einem Verzeichnis
2. wenn kein Binärarchiv, sondern nur ein Textarchiv (Open .. for output ...) erstellt werden soll.
Kommentar von Lubbie am 03.04.2005 um 10:51
Hi,
ich habe eine Frage:
Ich habe mir das Projekt gedownloaded, funzte alles wunderbar. Doch dann wollt ich es in ein Programm einbauen, mit der Folge das immer bei der Zeile "Get #FNr, , Files " folgender Fehler kam: Variable verwendet einen nicht unterstützten Typ der Automatisierung (Laufzeitfehler 458)
kann mir da einer weiterhelfen was ich falsch mache?
danke :)
Kommentar von Lutz von der Burchard am 03.04.2005 um 10:46
Versuche es da mal mit Stegano - damit kann man kleinere Dateien in eine .wav hineinpacken. Ich glaube das war irgendein Turtorial - such mal!
Kommentar von Buttermilch am 17.03.2004 um 19:28
bin ich jetzt depad, oder kann man da die
komprimierte dateiextension von sz zb. auf .bmp umbenennen,
so wäre es ja möglich verschiedene geheime texte
in eine .bmp zu schläusen, welche dann
vom word geöffnet werden wenn man die .bmp doppelclickt!!
(habe sowas schonmal gelesen - das mit dem dateien verstecken!)
geht das mit dem source auch?
Kommentar von x7aa1185 am 29.01.2004 um 18:29
kann man auch eine self extracting gepackte file erstellen?
mfg x7aa1185