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:
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:
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
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
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)
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
@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.
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. 🙄
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
@ 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]
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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]
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:
Download ( bin )
Download ( source )
Download ( setup; funktioniert z.T. nicht )
mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
Version 1.1.0.1 veröffentlicht!
Ich habe in dieser Version die GUI komplett neu gestaltet und einige weitere Funktionen hinzugefügt.
Changelog:
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]
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ß.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
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]
Version 1.2.0.1 veröffentlicht!
Ich habe in dieser Version einige Kleineigkeiten an Bugs gefixt und eine Pause-FUnktion hinzugefügt
Changelog:
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]
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?
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
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
Habe ein paar Veränderungen an 1.2.0.1 vorgenommen und das als 1.2.0.2 released.
Änderungen:
mfg
Hauke
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]
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
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]
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)
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.
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
Mein Blog über IT-Sicherheit und Kurioses aus der IT-Welt: [curi0sity]