Autor Beitrag
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 16.07.08 20:30 
Hallo,

ich schreibe schon seit einiger Zeit an einem Tuning-/Optimierungsprogramm für Windows (werde ich bald hier im DF veröffentlichen :) ). Zum krönenden Abschluss wollte ich ein eigenes DefragTool schreiben. Also habe ich mich über Cluster usw. ausführlich informiert.

Jetzt stellt sich mir die Frage: Ist das überhaupt in Delphi realisierbar? Und mit welchen Mitteln ? Da steh ich grad mächtig auf dem Schlauch und wär für Unterstützung sehr dankbar.


Grüße

Webo
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Mi 16.07.08 20:55 
Also prinzipiell denke ich schon dass es möglich ist, TuneUpUtilities ist ja auch in Delphi geschrieben. ;)
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 16.07.08 20:59 
Das lässt mich schon mal hoffen, vllt sollte ich die mal anschreiben wie die defragmentieren :)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 16.07.08 21:08 
Mal ne Frage: hast du irgendein bestechend geniales Konzept, oder warum soll man später dein Programm zum defragmentieren nehmen. Wenn nein, würde ich an deiner stelle lieber die Normale Windows-Defragmentierung verlinken. Nachher machst du irgendeinen Fehler, und darfst dann den Leuten erklären wo ihre Daten geblieben sind.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 16.07.08 21:11 
Genau, und die rücken das bestimmt einfach so raus..

Ganz ehrlich: lass es sein.
Nimms nicht persönlich, aber ich würd meine Festplatte lieber gar nicht defraggen, als da ein Programm zu verwenden, was mal "nebenbei als Hobby" geschrieben wurde - schließlich kann es hier sehr schnell zu Datenverlusten kommen!
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mi 16.07.08 21:52 
frag doch mal mael, der Hat einen Hexeditor geschrieben, der direkt auf die
Cluster und sektorend der Festplatte zugreift und byteweise samt leeren Bereichen anzeigt anzeigt. So ähnlich müsstest du auch auf die Festplatte zugreifen und Entsprechend verschieben. Auf jedenfall ist das Thema defragmentierung sehr komplex. Da währe es vermutlich einfacher, die Windows defrag zu nutzten und dass so dahinzufriemeln dass der user nichst merkt. Da würde man vermutlich mehrere Monate dran arbeiten und beim testen mehrere Gigabytes Daten ins Nirwana schicken^^
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 17.07.08 09:42 
Es gibt in Windows eine (native) PI, mit der mn Defragmentieren kann. Wo ich die Leute von SysInternals aber mal angeschrieben hab, hab ich nicht mal ne Antwort zurückbekommen. Das Tool Contig von denen ist aber nichts desto trotz ein nettes Progrämmchen um mal eben ne Defragmentierung zu realisieren (Da Kommandozeilen-Programm geht das über Pipes recht gut auszuwerten und in ne GUI einzubetten). Ich denke mal, damit solltest Du erstmal nen Ansatz-Punkt haben, wie Du deine Defragmentierung bauen kannst. Ferner gibt es nen IOCTL-Befehl, mit dem man das Cluster-Bitmap der HDD auslesen kann (gut, ist eigentlich auch nix andres als ne von der API versteckte Datei auf'm Laufwerk *G*). Das kombinieren, ein wenig grafisch aufbereiten und den Rest über nen gepipeten Prozess erledigen lassen, dann solltest Du eigentlich was Funktionierendes rausbekommen (und kannst bei Datenverlusten auf Microsoft verweisen :mrgreen:)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Do 17.07.08 15:56 
Danke schon mal für die vielen Antworten. Ich werde jetzt mal intensiv nach Möglichkeiten suchen, mein Projekt durchzusetzen, denn es gibt rund 5 andere Tools in meinem Großprojekt, die z.B. die Registry von verweisten Einträgen befreien usw., bei denen auch ein hohes Risiko des Datenverlusts besteht. Doch noch schönen 403 ! Durchläufen gab's nicht einen Absturz oder gar Datenverlust (auf mehreren Rechner getestet). Also könnt ihr mir glauben, dass ich auch bei einem DefragTool dafür sorgen werde, dass sowas möglichst nicht passiert.

Außerdem finde ich das ein bisschen schlapp bei so einem Großprojekt (größte was ich je alleine gemacht habe) als Abschluss einfach einen Link zum Windows-Defragger reinzupacken. Das mach ich erst dann, wenn ich vor dem eigenen Tool kapitulieren muss, und der Zeitpunkt ist im Moment garantiert nicht erreicht.

@BenBE

Hab schon fast einen Vertrag mit einem alten Bekannten, der mal ein kleines aber feines Defragtool programmiert hat, werde das dann zusätzlich (oder wenn mein Vorhaben scheitert), alleine mitliefern. Und die von SysInternals werde ich dann nicht anschreiben, wenn sie dir auch nicht geantwortet haben.


Grüße

Webo
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 17.07.08 16:01 
Ich mein ja auch nur dass du alle Eventualitäten beachten solltest. Beispiel: Programme schreiben auf die Partition, während diese gerade Defragmentiert wird.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Do 17.07.08 16:19 
user profile iconTilman hat folgendes geschrieben:
Ich mein ja auch nur dass du alle Eventualitäten beachten solltest. Beispiel: Programme schreiben auf die Partition, während diese gerade Defragmentiert wird.


Das ist wohl war, klar ich muss drauf aufpassen, dass bei niemanden Daten verloren gehen, aber es gibt sehr viele Defragmentierprogramme, die das auch können. Warum sollte ich das nicht einbauen können/wollen ?

Ich denke, die sicherste Variante ist: Wie z.B. PowerMagic das macht, einfach die Partition sperren für den Zeitraum (wie das geht muss man allerdings erstmal wissen). Bei der Windowspartition muss man dann aber ne andere Variante wählen.

Soweit bin ich ja noch lange nicht, deshalb habe ich dieses Thema erstellt um mir Tipps zu holen, die ich teilweise auch schon bekommen habe und dir mir geholfen haben.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 17.07.08 16:26 
Ich würde dir raten da auf etwas vorgefertigtes zuzugreifen. Denn mit den BS-Datei-Operationen kriegst du das nicht hin, sondern das erledigt der Dateisystemtreiber. Das heißt du müsstest, wenn du das wirklich selber machen möchtest, nen neuen Dateisystemtreiber schreiben. Viel Spaß! Nebenbei NTFS, was wohl in deinem Fall der Standard sein sollte ist nicht öffentlich dokumentiert, weshalb du daran schon scheitern würdest (Die Linux Leute haben dafür nen paar Jahren gebraucht NTFS-3G).
Was du aber machen könntest ist: Dateien die fragmentiert sind neu auf die Festplatte zu schreiben (an die gleiche Stelle im Verzeichnis Baum). Da hast du dann eine Chance, dass die zusammenhängend abgespeichert werden.
Nebenbei Paragon ist glaube ich eine von zwei Firmen weltweit (außer Microsoft), die nen eigenen ntfs-treiber haben
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 17.07.08 20:46 
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Do 17.07.08 21:29 
user profile iconLuckie hat folgendes geschrieben:
Guck mal hier: www.delphipraxis.net...;highlight=defrag%2A


Total nützlich, vielen Dank.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 17.07.08 21:31 
Selbst wenn Du SysInternals nicht direkt in dein Programm mitliefern darfst, kannst Du immer noch auf die Microsoft-Page verweisen, da es da sProgramm dort frei zum Download gibt. D.h. also einfach Schnittstelle für Contig einbauen und dann wenn's gefunden wurde, benutzten ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 17.07.08 23:18 
Ich hab vor ewigen Zeiten mal ein OpenSource-C-Programm nach Delphi übersetzt und auc längere Zeit benutzt. Die Antwort ist also: ja. Mittlerweile nutze ich PerfectDisk, und auch das nur auf der einen Partition wo BOINC drauf läuft, die vielen Zugriffe erzeugen halt massenweise Fragmente. Ansonsten hab ich die Erfahrung gemacht, dass defragmentieren schlichtweg Quatsch ist.

Leider wollte da die graphische Darstellung nicht so wie ich, das Canvas hat immer mal sein Handle vergessen. Mittlerweile weiß ich glaub ich sogar woran das lag, damals hab ich nicht wirklich an Thread-Synchronisierung gedacht.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.07.08 21:06 
user profile iconMartok hat folgendes geschrieben:
Ansonsten hab ich die Erfahrung gemacht, dass defragmentieren schlichtweg Quatsch ist
Kannst du das mal begründen? Warum ist es auf der einen Seite sinnvoll, aber auf der anderen Seite Quatsch?
Nils:D
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 131

Debian, Win XP
Delphi 7 Arch.
BeitragVerfasst: Fr 18.07.08 22:03 
Die Defragmentierung macht nur relativ gesehen Sinn. Wenn ich mein Projektverzeichnis defragmentiere macht das nur bedingt Sinn, da es sich eh fast jeden Tag verändert und somit ständig fragmentiert wird und auch täglich defragmentiert werden sollte - aber so viel bringt mir das eh nicht, also defragmentiere ich es mit, wenn ich irgendwann mal wieder alle Datenträger defragmentiere. Wenn man das Systemverzeichnis defragmentiert oder Verzeichnisse bei denen eher gelesen als geschrieben wird, macht es Sinn. Zum einen freut es das Dateisystem beim Zugriff und zum anderen ist es vorteilhaft, schneller Daten zu lesen. Ein Verzeichnis mit thumbnails sollte man denke ich defragmentieren, solange diese ständig gelesen werden.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 19.07.08 02:12 
user profile iconLuckie hat folgendes geschrieben:
user profile iconMartok hat folgendes geschrieben:
Ansonsten hab ich die Erfahrung gemacht, dass defragmentieren schlichtweg Quatsch ist
Kannst du das mal begründen? Warum ist es auf der einen Seite sinnvoll, aber auf der anderen Seite Quatsch?

Bitte das davor lesen:

user profile iconMartok hat folgendes geschrieben:
auf der einen Partition wo BOINC drauf läuft, die vielen Zugriffe erzeugen halt massenweise Fragmente.

Auf (fast) allen anderen Partitionen wird überwiegend eine gewisse Datenmenge geschrieben und die bleibt dann da, bis sie entweder gelöscht werden oder auf die Archivplatte wandern. Da fragmentiert der relativ wenig. Sagen zumindest die Programme: selten mehr als 5 fragmentierte Dateien. Hier irgendwas anzufassen ist 'wirtschaftlich' Unsinn.

BOINC is da schon etwas anderes, da werden ja Dateien durchgenudelt bis zu geht nicht mehr. Hier ist kaum eine Datei nicht fragmentiert. Und die ab und zu mal neu zu verteilen bringt schon was.

Zudem ist es einfach ein Erfahrungswert dass der Unterschied nicht spürbar ist, das System aber während dem Defrag praktisch ausfällt.

Auch wenn das anscheinend bereits gemacht wird, das bitte ignorieren, weil es völliger Quatsch ist:
user profile iconAllesquarks hat folgendes geschrieben:
Ich würde dir raten da auf etwas vorgefertigtes zuzugreifen. Denn mit den BS-Datei-Operationen kriegst du das nicht hin, sondern das erledigt der Dateisystemtreiber.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."