Backup von Datei erstellen und inkrementell speichern?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von TomWi.

    Backup von Datei erstellen und inkrementell speichern?

    Hallo Leute,

    ich brauche bitte Eure Hilfe.
    Ich möchte ein Backup von einer Datei erstellen und im Filename eine fortlaufende Nummer einfügen.

    Das erstellen eines Backupordners und das Kopieren der Datei vom Ursprungspfad in den Backupordner klappt. Leider schaff ich es nicht, pro Backup eine fortlaufende Nummer in den Filename zu schreiben.

    Also so

    Backup_1.txt, Backup_2.txt usw.

    Klar kann ich statt der fortlaufenden Nummer auch die aktuelle Uhrzeit mit Datum anhängen. So müsste ich nie prüfen, ob die Datei schon vorhanden ist, oder nicht. Aber das möchte ich nicht. Ich hätte gerne die Nummer im Filename.

    Bin für jeden Tipp dankbar.

    Tom

    EDIT:

    Eine Idee wäre, zu schauen, ob der newfilename gleich dem oldfilename ist. Wenn ja, dann soll er einen Counter hochzählen mit Counter +=1 und den Counter dann an den Namen anfügen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TomWi“ ()

    Am besten wäre es, wenn du in deinen Settings einen Integer lastnumber anlegst und das dann so verknüpfst:

    VB.NET-Quellcode

    1. 'so
    2. Dim zuverknüpfen As String() = {"Backup_" + My.Settings.lastnumber.ToString, ".txt"}
    3. Dim name1 As String = String.Join("", zuverknüpfen)
    4. 'oder so
    5. Dim name2 As String = "Backup_" & My.Settings.lastnumber.ToString & ".txt"

    8-) faxe1008 8-)
    vielen Dank euch beiden, für die Ansätze. Werde ich mir gleich näher anschauen.

    Tom

    EDIT:

    hier mal der Code, mit dem ich das Backup erstelle

    VB.NET-Quellcode

    1. Sub Backup()
    2. Dim FileExt As String = Path.GetExtension(openfilename)
    3. Dim Datum As String = Date.Today
    4. Dim SaveFileName = Path.GetFileNameWithoutExtension(openfilename) & "_" & FileExt
    5. Dim diBackup = New DirectoryInfo(Path.Combine(Path.GetDirectoryName(openfilename), "Backup"))
    6. diBackup.Create()
    7. Dim dateien = New DirectoryInfo(diBackup.ToString)
    8. Dim newfilename As String = Path.Combine(diBackup.FullName, SaveFileName)
    9. If File.Exists(newfilename) Then
    10. Else
    11. File.Copy(openfilename, newfilename)
    12. End If
    13. End Sub

    faxe1008 schrieb:

    Am besten wäre es, wenn du in deinen Settings einen Integer lastnumber anlegst
    Das würde aber voraussetzen, dass nur dein Programm und nur diese eine Instanz auf dem Backupverzeichnis rumwerkelt.
    Das ist vielleicht ein wenig viel vorausgesetzt.

    Auch die Lösung von backtothetoast ist nicht ganz sauber, weil hier (falls Lücken existieren) die neueste Datei nicht die höchste Nummer bekommt.

    Die Grundidee, einen Timestamp anzuhängen, ist gar nicht so schlecht.
    Immerhin beinhaltet er auch noch nützliche Zusatzinformation, die interessant sein mag.
    Allerdings muss der Timestamp so granular sein, dass er sich nicht selbst überholt, also ggf. incl. Tausendstel Sekunden.

    Ausserdem würde ich die Datei nicht Backup... nennen, sondern den ursprünglichen Namen der Datei mit einbringen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Geschafft:

    hier der Code:

    VB.NET-Quellcode

    1. Sub Backup()
    2. Dim FileExt As String = Path.GetExtension(openfilename)
    3. Dim Datum As String = Date.Today
    4. Dim SaveFileName = Path.GetFileNameWithoutExtension(openfilename) & FileExt
    5. Dim diBackup = New DirectoryInfo(Path.Combine(Path.GetDirectoryName(openfilename), "Backup"))
    6. diBackup.Create()
    7. Dim dateien = New DirectoryInfo(diBackup.ToString)
    8. Dim newfilename As String = Path.Combine(diBackup.FullName, SaveFileName)
    9. If File.Exists(newfilename) Then
    10. If File.Exists(newfilename) Then
    11. Dim fileName = Path.GetFileNameWithoutExtension(newfilename)
    12. Dim fileNumber = 0
    13. Do
    14. fileNumber += 1
    15. newfilename = Path.Combine(diBackup.FullName, String.Format("{0} ({1}){2}", fileName, fileNumber, FileExt))
    16. Loop While File.Exists(newfilename)
    17. File.Copy(openfilename, newfilename)
    18. End If
    19. Else
    20. File.Copy(openfilename, newfilename)
    21. End If
    22. End Sub


    jetzt hab ich aber noch ne Frage: Hat zwar nichts mit dem Haeder des Posts zu tun, aber mit dem Codeschnipsel hier.

    wie kann ich diesen Codeschnipsel als snippet speichern? Sodass ich ihn in anderen Programmen, die eine Backupfunktion erfordern, auch nutzen kann.


    Tom