Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SimpleBackup ( ein open source Backup tool )
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

SimpleBackup ( ein open source Backup tool )

beantworten | zitieren | melden

Hallo liebe Community,

ich wollte euch eben mein kleines Projekt "SimpleBackup" vorstellen. Es handelt sich dabei um ein open-source Projekt.

( Download s.u. )

Was ist SimpleBackup?
SimpleBackup ist ein kleines, sehr einfach gestaltetes Backup Programm, mit dem man Backups von Ordnern erstellen kann. Dabei bietet SimpleBackup einige extra Funktionen.
Dateien werden dabei nicht komprimiert, sodass der kopiervorgang beschleunigt wird ( es heißt ja auch SimpleBackup ).

Was gibt es für Funktionen?
Version 1.3.0.0:
- Tab "Optoinen->Einstellungen->gespeicherte Einstellungen" gelöscht (war zu verbuggt und unübersichtlich)
- Drei Buttons zum erstellen, bearbeiten und löschen von Einstellungen unter der Liste mit Einstellungen
- Übersetzungen sind nun in eigener Datei untergebracht, man kann so einfach neue Übersetzungen anfertigen.
Version 1.2.0.2:
- Dateigrößen werden nun hinter dem Dateinamen angezeigt
- Wenn der Dateipfad + Name zu lang ist, wird ein tooltip angeziegt, sobald man mit der Maus über das Label "Momentane Datei" geht.
- Wenn der Dateopfad im Zielordner über 260 zeichen lang ist, bricht das Backup nicht mehr ab ( Datei wird aber auch nicht kopiert ).
Version 1.2.0.1:
- Backup kann nun pausiert werden
- kleinere Bugs nach beenden des Backups behoben

Wie trage ich etwas bei?
Einfach auf die Sourceforge.net-Seite von SimpleBackup und geht ins Forum.
Dort findet ihr das Unterforum "Contributions", in dem ein Beitrag ist ( "How to contribute" ). Dort steht alles wichtige drin.
Hier jedoch nochmal die deutsche Version, wenn ihr etwas zum Code beitragen möchtet:
- Ladet euch den Code der neusten Version runter ( unter "Files"->"[Version]"->"[Version]_source.zip" )
- Editiert den Code nach euren Wünschen
- Schickt mit eine E-Mail ( hauke_L@gmx.de ) mit dem neuen Projekt ( also der neuen zip-Dateo ) oder ladet es ins Forum hoch.
Ich werde danach das Projekt angucken und es ggf. unter "Files"->"[Version]"->"[Version]_source.zip" hochladen.

Screenshot:
Im Anhang.
Es gibt SimpleBackup auch in Deutsch ( könnt ihr unter "language" einstellen )

Download & Support:
Alle Download von Sourceforge.net
Für alle Downloads wird microsoft .NET 4 benötigt.
Support: Tickets ( für Feature Vorschläge und Bugs), Forum ( Fragen, etc. )
Aktuelle Version ist: 1.3.0.0

Download: Aktuelle Version ( exe )

Andere Versionen:
Download ( Version 1.3.0.0 ): Setup ( nicht empfohlen, funktioniert z.T. nicht ), exe ( in zip-Datei, keine Installation nötig, empfohlen ), Quellcode ( VisualStudio 2010 Projektordner )
Download ( Version 1.2.0.2 ): Setup ( nicht empfohlen, funktioniert z.T. nicht ), exe ( in zip-Datei, keine Installation nötig, empfohlen ), Quellcode ( VisualStudio 2010 Projektordner )
Download ( Version 1.2.0.1 ): Setup ( nicht empfohlen, funktioniert z.T. nicht ), exe ( in zip-Datei, keine Installation nötig, empfohlen ), Quellcode ( VisualStudio 2010 Projektordner )


Wäre toll, wenn ihr etwas zum Programm, bzw. zum Code sagen könntet ( da es mein erstes open-source Projekt ist, welches fertig wurde ).

mfg
Hauke
Dieser Beitrag wurde 10 mal editiert, zum letzten Mal von hauke96 am .
Attachments
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Möchtest Du Kritik am Code hören?
  • Keinerlei Trennung zwischen Oberfläche und Business-Logik
  • Teilweise enorme Fehler(anfällige Aufrufe) bei der Verwendung von Methoden (zB Zusammenfügen von Strings)
  • Zahlreiche Methoden werden unnötigerweise doppelt aufgerufen (zB dInfo.GetDirectories()) - für die Performance alles andere als förderlich
  • Verwendung von veralteten Methoden wie eben GetFiles. Siehe Performance-Vergleich bei meinem QuickIO-Projekt auf http://quickio.net/
  • keinerlei professionelle Fehlerbehandlung. zB: catch (Exception ex) { }


Insgesamt kann ich leider nur abraten, weil der Code dem Anspruch eines Backups eher nicht gerecht wird; sorry.
Da solltest Du auf alle Fälle noch mals dran arbeiten. Die grobe Basis hast Du ja, also lass Dich von meiner Kritik eher gefordert fühlen statt entmutigt.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.087
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@hauke96
Ich will dein Projekt nicht schlecht reden, aber Backup Tools gibt es wie Sand am Meer.
Auch die Funktionen die du anbietest, sind keine Neuheit.

@Abt
Ich kann deine Kritik leider nur unterstreichen.
Leider kann ich dir aber mit dem GetFiles Problem nicht ganz zustimmen.
Zwar ist es eine langsame und eigentlich sogar eine Optmierungspflichtige Methode.
Aber im Endeffekt dürfte dies nur bedingt ein Problem sein.

Ob ich jetzt pro Ordner 10 oder 20 ms spare, ist keine große Sache.
Backup sind meistens lang laufende Tasks, die im Hintergrund arbeiten.
Da kommt es mir auf Performance nicht direkt an.
Wichtiger ist eher, dass die Daten die ich sichern will, schnell gelesen und geschrieben werden können.

Auch finde ich es etwas bedenklich auf dein Projekt QuickIO zu verweisen.
Es ist zwar immer interessant, wenn es bessere Lösungen gibt.
Aber Eigenwerbung ist nicht umbedingt etwas, was ich in einem Entwicklerforum betreiben würde.
Bitte verlinke deine Vergleiche doch direkt ins Forum anstelle von "Werbung" von Eigenentwicklungen zu machen.

Es ist auch nicht sonderlich förderlich für den TE wenn man sein Projekt in der Luft zerreißt, vor der Nutzung des Projekts warnt und dann mit eigenen Tools wirbt.
Das ist sehr unprofessionell.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Es ist nicht als Eigenwerbung gedacht; der Quellcode ist offen und jeder kann sich bedienen oder Verbesserungen abschauen: so ist es gedacht und dafür ist es da und lizenziert (statt GPL eben MSPL).
Man muss nich einem immer was negatives in einer Hilfe unterstellen - vollkommen unnötig

Persönliche Kritik wäre übrigens per PN angebracht; nicht in einem Projektthread.
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

@ Abt
Danke schonmal für die Kritik ( war ja gewollt, sonst hätte ich den Thread wohl kaum gestartet ;) ). Ich denke es ist klar, dass das noch nicht die endgültige Version ist, Verbesserungen wird es immer geben. War halt mein erstes Projekt, was ich in diesem Umfang fertig gestellt haben.
QuickIO werde ich einbauen und nochmal unnötige Aufrufe etc. durchgehen. Auch die Fehlerbehebung ( mit catch(){} etc. ) werde ich verbessern.

@ T-Virus
Auch wenn Abt die Erweiterung entwickelt hat, so denke ich, ist es für mich als Entwickler von SimpleBackup förderlich, wenn es Dinge gibt, die mein Tool besser machen.

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.310

beantworten | zitieren | melden

Brauchst QuickIO nicht im kompletten einbauen (darfst es natürlich aber); die relevanten Dinge für Dich ist ja vor allem das Suchen und das Kopieren.
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

So, habe QuickIO mit eingebracht und statt

catch(Exception ex) { }
überall noch ne MessageBox rein gesetzt:

catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

ich hoffe der Code ist nun ein wenig besser als der von Version 1.0.0.1. Habe auch die Events von den anderen Methoden getrennt.

( hier gehts zu Sourceforge, aktuelle Version ist 1.0.1.2 )

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Version 1.0.2.1 veröffentlicht!

Ich habe besonders an der Fehlerbehandlung gearbeitet, sie von der business-layer so gut es geht weg gehalten und auch die MessageBoxen wieder ausgebaut ( s.u. ).

Changelog:
- Fehler werden in ListBox angezeigt
- Statt eines Threads zum kopieren etc. der Dateien gibt es nun einen BackgroundWorker ( besseres Fehler-handling )
- Fehler werden zudem in einer Datei gespeichert ( [DATUM UHRZEIT].log ). Wenn ihr also einen Fehler bekommt, berichtet ihn doch bitte ( mit dem Inhalt der Datei ).
- Kleinigkeiten wurden an den Schleifen zum suchen/kopieren geändert

Download ( bin )
Download ( source )
Download ( setup; funktioniert z.T. nicht )

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Version 1.1.0.1 veröffentlicht!

Ich habe in dieser Version die GUI komplett neu gestaltet und einige weitere Funktionen hinzugefügt.

Changelog:
- Menüleiste mit den wichtigsten Optionen
- Sprache, Einstellungsverwaltung in extra Fenster gepackt ( Optionen -> Einstellunge )
- Updater, der nach verfügbaren updates sucht
- help_de.html und help_en.html als neue Hilfedateien

Download ( bin )
Download ( source )
Download ( setup; funktioniert z.T. nicht richtig )

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Experte

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.878
Herkunft: Düsseldorf

beantworten | zitieren | melden

Ich habe das Programm jetzt nicht getestet, aber ich habe einen Gedanken zur GUI, die ich ja oben im Bild sehen kann, den würde ich gerne mit teilen.

Warum sind die aktuellen Status-Informationen zu dem aktuell laufenden Backup-Vorgang unter den Einstellungen?
Ich finde es besser, wenn das nur dann zu sehen ist, wenn der Vorgang am laufen ist und nach der Beendigung so lange zu sehen belibt, bis es geschlossen wird.

Das würde also bedeuten, dass alles unterhalb des Start-Buttons nicht da ist, aber beim Starten des Vorgangs "ausfährt", oder als extra Fenster zu sehen ist. Wenn der Vorgang beendet wurde, kann der Nutzer sich das noch anschauen, oder weg klicken.

So wäre das Fenster nur halb so groß.
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Das stimmt, Platzsparender wäre es. Ich füge das als Option in die nächste Version mit hinzu ( also dann so: Normal sieht man den uneren teil nicht, man kann ihn aber manuell ausfahren und beim laufenden backup fährt er von alleine aus )

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Version 1.2.0.1 veröffentlicht!

Ich habe in dieser Version einige Kleineigkeiten an Bugs gefixt und eine Pause-FUnktion hinzugefügt

Changelog:
- Backup kann pausiert werden
- kleinere Bugs nach dem Ende des Backups gefixt

Download ( bin )
Download ( source )
Download ( setup; funktioniert z.T. nicht richtig )

mfg
Hauke
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hauke96 am .
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

[offtopic]

Hallo T-Virus,

Ich glaube du unterschätzt das GetFiles() Problem. Wir haben einen Kunden da liegen mal eben über 300.000 Dokumente in einem einzigen Netzwerkordner. Da läuft man mit GetFiles() unter Umständen in Timeout oder OutOfMemory Exceptions. Es ist nicht nur eine Frage der Performance. (Wobei ich es sowieso falsch finde, sich auf eine geringe Erbebnissmenge zu verlassen)

Hallo hauke96,

Mir ist die Option aufgefallen das du ein Replace anbietest falls die Quelldatei neuer ist, wie realisierst du das? Die vorher kopierte Datei wird ja immer neuer sein als die alte, ausser du kopierst die FileInformations aus der NTFS table auch gleich mit damit die Timestamps(Create,LastModified) dem Original entsprechen. Andernfalls wäre die Option ja quasi sinnlos. Wie realisierst du das?

[/offtopic]
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Zitat von Sebastian.Lange
falls die Quelldatei neuer ist
Wäre das nicht das normale kopieren? Also wenn im Quellordner ( also den ZU "backupenden" Ordner ) neuere Dateien sind ( dabei greife ich einfach die Zeit der letzten Änderung ab ), überschreibe ich einfach die Datei im Ordner, wo das Backup liegt.
Ich glaube du meinst die Funktion, dass alte Dateien aus dem backup-Ordner, die nicht im Quellordner drin sind, gelöscht werden?
Das mache ich einfach so, dass ich alle Dateien aus dem Backup-Ordner nochmals durchgehe und gucke ob es den Pfad + Datei auch im Quellordner gibt.

Wenn du also den Ordner C:\Users\abc\Videos\Prnos\ hast, nach D:\Videos\ gesichert hast, dort jedoch noch die datei D:\Videos\xxx.avi liegt, welche unter \Prnos\ nicht vorhanden ist, wird diese gelöscht.
Man muss dabei relative Pfade verwenden, also nicht C:... sondern nur den Teil, der bei beiden Ordnern ( Quell- und Zielordner ) vorhanden ist ( also Dateien und Unterordner ).
Das ganze ist im prinzip sehr simpel ;) gehalten, man guckt welche unterschiede es gibt und verändert es so, dass es keine Unterschiede mehr gibt.

Ich hoffe es war einigermaßen verständlich ;)

mfg
Hauke
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hauke96 am .
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Habe ein paar Veränderungen an 1.2.0.1 vorgenommen und das als 1.2.0.2 released.
Änderungen:
- Dateigrößen werden hinter dem Dateinamen angezeigt
- Wenn das label des Dateinamens länger ist als das Fenster breit ist, wird ein tooltip angezeigt
- Bug-fix: Wenn der Zielpfad einer Datei mehr als 260 Zeichen hat, wird diese nicht kopiert und der Backupprozess bricht nicht mehr ab.
Download ( Version 1.2.0.2 ):
exe ( in zip-Datei, keine Installation nötig, empfohlen ),
Quellcode ( VisualStudio 2010 Projektordner ),
Setup ( nicht empfohlen, funktioniert z.T. nicht )

mfg
Hauke
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hauke96 am .
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Wir haben vieles an Bugs gefixt und auch die ein oder andere Funktion hinzugefügt. Hier nun die größten Neuerungen in 1.3.0.0
- Tab "Optoinen->Einstellungen->gespeicherte Einstellungen" gelöscht (war zu verbuggt und unübersichtlich)
- Drei Buttons zum erstellen, bearbeiten und löschen von Einstellungen unter der Liste mit Einstellungen
- Übersetzungen sind nun in eigener Datei untergebracht, man kann so einfach neue Übersetzungen anfertigen.

Download ( Version 1.3.0.0 ):
exe ( in zip-Datei, keine Installation nötig, empfohlen )
Setup ( nicht empfohlen, funktioniert z.T. nicht )
Quellcode ( VisualStudio 2010 Projektordner )

mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers
alexpj
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

nettes Tool!

ich habe versucht, es mir dahingehend anzupassen, das die Listbox optional komplett (Checkbox) nacheinander abgearbeitet wird.

Leider bisher vergeblich.
Werte ich die Listbox mit foreach aus. bekomme ich folgenden Fehler:
"Die Liste, an die der Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird."

Mache ich eine normale Schleife wird das Backup nach dem ersten Eintrag beendet.

     private void Button_StartStopBackup_Click(object _sender, EventArgs _e)
        {
            if (checkBox1.Checked == true) //Alle Listboxeinträge abarbeiten
            {
               // MultiSelect = true; //Mehrfachauswahl vorhanden noc nicht benötigt
               ListBox_ListOfSettings.ClearSelected();
               for (int i = 0; i < ListBox_ListOfSettings.Items.Count; i++)

               ListBox_ListOfSettings.SelectedIndex = i;
               StartBackup();
             }
        
            else
            {
               // MultiSelect = false;
                StartBackup();
            }
        }


        private void StartBackup()
             {
                    if (BackupIsRunning && Button_StartStopBackup.Text != "OK")// Stop Backup)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von alexpj am .
private Nachricht | Beiträge des Benutzers
teebeast
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: Bayern

beantworten | zitieren | melden

Hi,

die Klammerung Deiner for-Schleife fehlt. StartBackup wird nur einmal ausgeführt. Grundsätzlich würde ich Dir empfehlen, dass Du der Methode StartBackup die zu kopierenden Elemente in einer Liste übergibst und diese dann über die einzelnen Elemente iteriert.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von teebeast am .
private Nachricht | Beiträge des Benutzers
hauke96
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

Zitat von teebeast
die Klammerung Deiner for-Schleife fehlt. StartBackup wird nur einmal ausgeführt.
Genau wie es Apple mit dem GoTo Problem zum Verhängnis wurde: Fehlende Klammerung ;)

Allgemein arbeite ist an diesem Projekt in C# nicht weiter. Eventuell eines Tages mal wieder, aber eher unwahrscheinlich. Eventuell schreibe ich aber eine hoffentlich übersichtlichere, bessere, bug-freiere und Plattform unabhängige Version in Java oder Go ... mal sehn ... Ich arbeite aber momentan an einem go-Projekt, in dem ich SimpleBackup implementiere. Dieses ist im selben github repo.

mfg
Hauke
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hauke96 am .
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
private Nachricht | Beiträge des Benutzers