ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 26.06.2000

Diese Seite wurde zuletzt aktualisiert am 26.06.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Backups mit Versionen

Zurück...


Anzeige

(-hg) mailto:hg_numberedbackups@aboutvb.de

Sicher haben Sie schon Anwendungen gesehen, die von veränderten Dokumenten, Arbeitsdateien oder Konfigurationsdateien usw. nicht nur den jeweils letzten Zustand als Backup-Datei ablegen, sondern durchnummerierte Versionen bis zu einer bestimmten maximalen Anzahl. Und erst wenn diese maximale Anzahl überschritten wird, wird die jeweils älteste Version überschrieben. Dabei wird meistens die (üblicherweise drei Zeichen lange) Dateierweiterung durch die Versionsnummer ersetzt: Datei.001, Datei.002, Datei.003, ... , Datei.[max].

Mit Hilfe der Datei-Funktionen des MSDN Library - VB FileSystemObjectFileSystemObjects aus der Microsoft Scripting Runtime (seit Visual Basic 6 standardmäßig enthalten) ist ein solcher Backup-Mechanismus recht einfach anzulegen. Es erspart Ihnen die doch etwas umständliche Hantiererei mit der "alten" MSDN Library - VB DirDir-Funktion zur Ermittlung der bereits vorhandenen Versionen.

Die Funktion NumberedBackup erledigt die ganze Arbeit für Sie. Lediglich die Microsoft Scripting Runtime müssen Sie noch als Verweis in Ihr Projekt einbinden.

Sie übergeben der Funktion mindestens den Pfad der zu sichernden Datei im ersten Parameter. Die übrigen Parameter sind optional. Soll die Sicherung in einem anderen Verzeichnis erfolgen, geben Sie in BackupPath dessen Pfad an. Die maximale Anzahl der Versionen können Sie in BackupMaxNum angeben - voreingestellt sind 10 Versionen. In CreateBackupPath können Sie noch angeben, ob das Sicherungsverzeichnis angelegt werden soll, falls es noch nicht existiert - anderenfalls würde dann ein Laufzeitfehler ausgelöst (nbErrBackupPathNotFound). Existiert die angegebene, zu sichernde Datei nicht, wird ebenfalls ein Laufzeitfehler ausgelöst (nbErrSourceFileNotFound). Diese beiden Laufzeitfehler wie auch unter Umständen andere Fehler (wenn etwa das Ziellaufwerk nicht bereit ist o.ä.) können Sie mit dem Einschalten einer Fehlerbehandlung vor dem Aufruf von NumberedBackup abfangen.

Public Const nbErrBackupPathNotFound = vbObjectError + 10001
Public Const nbErrSourceFileNotFound = vbObjectError + 10002

Public Function NumberedBackup(SourceFile As String, _
 Optional BackupPath As String, _
 Optional ByVal BackupMaxNum As Integer = 10, _
 Optional ByVal CreateBackupPath As Boolean) As String

  Dim nBackupPath As String
  Dim i As Integer
  Dim nFileBaseName As String
  Dim nBackupFileName As String
  Dim nOldestFile As File
  Dim nBackupFile As File
  Dim nFileAttributes As Long
  Dim nFNr As Long
  Dim nContents() As Byte
  
  On Error GoTo NumberedBackup_Error
  With New FileSystemObject
    If .FileExists(SourceFile) Then
      If Len(BackupPath) Then
        nBackupPath = BackupPath
        If Not .FolderExists(nBackupPath) Then
          If Not CreateBackupPath Then
            Err.Raise nbErrBackupPathNotFound, , nBackupPath
          Else
            .CreateFolder nBackupPath
          End If
        End If
      Else
        nBackupPath = .GetParentFolderName(SourceFile)
      End If
    Else
      Err.Raise nbErrSourceFileNotFound, , SourceFile
    End If
    nFileBaseName = .GetBaseName(SourceFile)
    For i = 1 To BackupMaxNum
      nBackupFileName = .BuildPath(nBackupPath, _
       nFileBaseName & "." & Format$(i, "000"))
      If .FileExists(nBackupFileName) Then
        Set nBackupFile = .GetFile(nBackupFileName)
        If nOldestFile Is Nothing Then
          Set nOldestFile = nBackupFile
        ElseIf nBackupFile.DateCreated < nOldestFile.DateCreated Then
          Set nOldestFile = nBackupFile
        End If
      Else
        Set nOldestFile = Nothing
        Exit For
      End If
    Next 'i
    If Not (nOldestFile Is Nothing) Then
      nBackupFileName = nOldestFile.Path
    End If
    nFileAttributes = GetAttr(SourceFile)
    nFNr = FreeFile
    Open SourceFile For Binary Access Read Lock Read As #nFNr
      ReDim nContents(1 To LOF(nFNr))
      Get #nFNr, , nContents()
    Close #nFNr
    If .FileExists(nBackupFileName) Then
      .DeleteFile nBackupFileName, True
    End If
    nFNr = FreeFile
    Open nBackupFileName For Binary Access Write Lock Write As #nFNr
      Put #nFNr, , nContents()
    Close #nFNr
    SetAttr nBackupFileName, nFileAttributes
    NumberedBackup = nBackupFileName
  End With
  Exit Function
  
NumberedBackup_Error:
  Err.Raise Err.Number, "NumberedBackup", Err.Description
End Function

Falls Sie sich darüber wundern sollten, dass nicht die VB-Anweisung MSDN Library - VB FileCopyFileCopy oder die Kopier-Methoden des FileSystemObjects verwendet werden: Diese würden verhindern, dass jeweils die älteste Version gefunden und überschrieben werden kann, weil sie beim Kopieren sowohl das Erstellungs-Datum der Datei als auch das Datum der letzten Änderung übernehmen. Die gesicherten Versionen wären hinsichtlich der Datumsangaben identisch.


Modul modNumberedBackups (modNumberedBackups.bas - ca. 2,9 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer