AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Daniel's Copier - Update: 5.2.2005
Thema durchsuchen
Ansicht
Themen-Optionen

Daniel's Copier - Update: 5.2.2005

Ein Thema von Kernel32.DLL · begonnen am 23. Jan 2005 · letzter Beitrag vom 29. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Kernel32.DLL
Daniel's Copier ReRelease

What's that?
"DUC" dient dazu, Daten von beschädigten Datenträgern zu retten. Angenommen, ihr habt eine VCD die extrem verkratzt ist. Jetzt wollt ihr die Datei auf der CD unbedingt noch vor dem weiteren Verfall retten. Also benutzt ihr den Windows Explorer und zieht via Copy&Paste die Datei auf den Rechner.
So weit, so gut. Jetzt kann es aber passieren, dass der Windows Explorer auf Grund der beschädigten Datenstruktur sich weigert, die Datei zu kopieren. Es kann auch passieren, dass sich das komplette System aufhängt.

Ja, und?
"DUC" ist anders. Das Programm kopiert ohne zu murren eine beschädigte Datei. Sollten die aktuellen Bytes partout nicht lesbar sein, wird einfach weitergesprungen.


Noch was:

Je nachdem, wie beschädigt die CD und wie gut euer Laufwerk ist, kann dieser Vorgang mehrere Stunden dauern...

Der Fairness halber verweise ich noch auf das Programm, dass Dust Signs im Delphi-Forum vorgestellt hat und denselben Dienst leistet wie meins, allerdings mit dem Unterschied, dass meins ein GUI hat, Dust Sign's hingegen eine Konsolen-App ist. Dadurch bin ich wieder auf mein Projekt gestoßen. Thx.

************************************************** ******


Nun denn, der nächste Anlauf:

Version 1.5 ReRelease

Es wurde Einiges geändert:
  • Kompletter Verzicht auf die TThread-Klasse
  • Kompletter Verzicht auf die Units Classes & SysUtils, dadurch ~50kb eingespart
  • Den dämlichen Fehler mit den 49152 Bytes zuwenig korrigiert. (<= Fehler war echt dämlich! )
  • Keine AV beim Beenden des Programmes
  • Log-Liste in eigenem Fenster

    ToDo-Liste:
  • Rekursive Dateiensuche in Ordnern, um komplette Ordnerinhalte in einem Rutsch zu kopieren. Ist bereits im QT zu finden, ist aber noch zu buggy.
  • Zahl der zu lesenden Bytes von 1*1024 - 64*1024 einstellbar machen, um den User selbst entscheiden zu lassen:
    Geschwindigkeit <=> Genauigkeit

Hoff' mal, dass es jetzt besser läuft!

[Edit 0815] Kaum 10 Min. Online und schon das erste Update der neuen Version[/Edit 0815]
Angehängte Dateien
Dateityp: zip dc_117.zip (37,8 KB, 138x aufgerufen)
 
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#2
  Alt 23. Jan 2005, 01:35
Hi,

ich habe dein Programm getestet und 2 Fehler entdeckt.
1. Fehler: dein Programm hat nicht gestoppt als die eigentliche Dateigröße schon kopiert wurde. Es hat meine Datei größer gemacht als sie eigentlich war (siehe Anhang, links das Ergebnis, rechts das original). Ich habe den Kopiervorgang dann einfach abgebrochen.
2. Fehler: Wenn man während des Kopiervorgangs auf den Kopierenbottun klickt werden alle Icons in der Liste zu dem error icon umgeändert.

Aber sonst ist dein Programm genau das, was ich gesucht habe.

Gruß
Miniaturansicht angehängter Grafiken
fehler_1_108.png  
André
  Mit Zitat antworten Zitat
Kernel32.DLL
 
#3
  Alt 23. Jan 2005, 10:47
Zitat von MagicAndre1981:
1. Fehler: dein Programm hat nicht gestoppt als die eigentliche Dateigröße schon kopiert wurde. Es hat meine Datei größer gemacht als sie eigentlich war (siehe Anhang, links das Ergebnis, rechts das original). Ich habe den Kopiervorgang dann einfach abgebrochen.
Verdammt, das sollte natürlich nicht so sein. Werde mich ransetzen.

Zitat von MagicAndre1981:
2. Fehler: Wenn man während des Kopiervorgangs auf den Kopierenbottun klickt werden alle Icons in der Liste zu dem error icon umgeändert.
Das meinte ich mit:

Zitat:
ToDO-Liste:
[...]
-Extreme Probleme mit HIMAGELIST
Weiß nocht nicht hundertpro, wie ich das gefixt bekomme...

Daniel
  Mit Zitat antworten Zitat
Kernel32.DLL
 
#4
  Alt 23. Jan 2005, 12:34
So, kleiner Hotfix => siehe 1. Beitrag

Jetzt weiß ich, was der Button "Neue Version hochladen" soll
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#5
  Alt 23. Jan 2005, 14:08
Hi,

das Programm arbeitet jetzt bis auf das Iconproblem korrekt. Frag doch wegen den Icons mal den Win32 API Freak Luckie.

Gruß
André
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 24. Jan 2005, 02:25
Puh. "vom gut lesbar Status weit entfernt" ist gut. Noch nicht mal in der Nähe würde ich sagen. Keine Kommentare nichts. Und deine Kopier-Routine bleibt mir ein Rätsel.

Im Anhang die überarbeitet Version, was die Icons im Listview angeht. Um den Rest habe ich mich nicht gekümmert, bis auf die Tatsache, dass ich deine zwei Ditzend überflüssigen Variablen entfernt habe und die Warnungen behoben habe, damit ich sehe, welche warnungen und Hinweise von meinem Code verursacht werden. Dass der Compiler Hinweise und Warnungen ausgibt hat schon seinen Sinn. Und gerade Warnungen würde ich nicht unbeachtet lassen.

Delphi-Quellcode:
{*************************************************************

  Luckie:
  So habe mal etwas geändert und verbessert.

  1.) Prozedur MakeColumns für die Spalte vom Listview.
  2.) Eigene Prozedur geschrieben, um Statusinformationen
      im Listview anzuzeigen (AddStatus). Deine war
      unbrauchbar. Du hast irgendwie jedes mal die Bitmaps
      wieder zur ImageList hinzugefügt oder so. Das braucht
      man nur einmal beim Erstellen der ImageListe. Siehe
      dazu Code in WM_CREATE.
      AddStatus erwartet als ersten Parameter die Status-
      meldung und als zweiten den IconIndex aus der Image-
      liste, das angezeigt werden soll. Dabei beginnt die
      Zählung bei null!
      Musst du mal gucken, ob das so passt, wie du es dir
      vorstellst.
  3.) Man sollte keine hardgecodeten Zeichenkettenkonstanten
      benutzen. Statt dessen entweder richtige Konstanten
      nehmen oder besser, falls die Anwendung mal lokalisiert
      werden muss, Resourcenstrings, diese werden in die
      Ressource einkompiliert.
  4.) Dutzende von überflüssigen Variabeln entfernt.
      (Hinweise und vorallem Warnungen spuckt der Compiler
      nicht aus, um nicht beachtet zu werden!!!)

  Sonstige Anmerkungen:
  1.) Deaktiviere die Schaltflächen, wenn sie nicht
      angeklickt werden sollen / dürfen. Ist anwender-
      freundlicher und erspart dir Code, um Fehler
      abzufangen.
  2.) Existiert die zu kopierende Datei nicht, bekommst du
      hier:
      j := x * 100 div GetFileSize(source);
      eine Exception. Prüf vorher, ob die Datei existiert
  3.) Wo wird hinkopiert, wenn das Verzeichnis nicht
      existiert?
  4.) In der Execute Methode deines Threads fehlt jegliche
      Fehlerbehandlung.
      Es wird nicht geprüft, ob die Datei oder das
      Zielverzeichnis existiert.
      Es werden nur schön Statusmeldungen ausgegeben, wenn
      etwas geklappt hat, aber was wird ausgegeben, wenn
      was schief gelaufen ist? Nichts.
  5.) Dein Thread wird nie terminiert. Daher ist ein
      zweiter Kopiervorgang nie möglich. Selbst das Klicken
      auf "Abbrechen" terminiert anscheinend den Thread nicht.
  6.) Es gibt immer eine schöne AccessViolation beim
      Beenden. Darum habe ich mich aber jetzt nicht
      gekümmert.
  7.) Bei jeder Datei, die ich kopiert habe konnten 49152
      Bytes angeblich nicht gelesen und kopiert werden.
  8.) Die kopierte Datei ist größer, als die ursprüngliche
      Quelldatei?!? Wie kannst du mehr kopieren, als
      vorhanden ist?
  9.) Warum nonVCL, wenn du die Dickemacher (SysUtils, Classes)
      doch benutzt?
      Wenn ich deinen Kopier-Code verstehen würde, würde
      ich mal eben ein Version ohne die TThread-Klasse
      machen.
  10.) Übergib dem Thread Quelldatei und Zielverzeichnis
      als Paramter und hol sie nicht in der Execute
      Methode aus den Edits.


*************************************************************}
Änderungen von mir im Code sind mit
// Luckie gekennzeichnet. Das steht immer über der Änderung. Ganze Prozeduren habe ich mit einem Prozedur-Header versehen.
Angehängte Dateien
Dateityp: zip duc_459.zip (80,6 KB, 50x aufgerufen)
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#7
  Alt 24. Jan 2005, 08:33
Zitat von Kernel32.DLL:
Daniel's Unstoppable Copier PreRelease
Die Konkurrenz für http://www.roadkil.net/unstopcp.html

Zitat von Kernel32.DLL:
... Angenommen, ihr habt eine VCD die extrem verkratzt ist. ...

... Sollten die aktuellen Bytes partout nicht lesbar sein, wird einfach weitergesprungen.
Werden MPEGs nicht paketweise gelesen? Dann müssten die fehlenden Bytes doch aufgefüllt werden.
  Mit Zitat antworten Zitat
Kernel32.DLL
 
#8
  Alt 24. Jan 2005, 18:18
@Luckie: Ziemlich vernichtendes Urteil. Werde mir deine Kritik zu Herzen nehmen. Ich komme 'grad von meinem Praktikumsplatz und sehe mir die Änderungen mal an. Danke dir.

Zitat von Garfield:
Zitat von Kernel32.DLL:
Daniel's Unstoppable Copier PreRelease
Die Konkurrenz für http://www.roadkil.net/unstopcp.html
Verdammt, das Programm kenn ich gar nich! Muss ich jetzt den Namen meines Tools ändern?


Zitat von Garfield:
Zitat von Kernel32.DLL:
... Angenommen, ihr habt eine VCD die extrem verkratzt ist. ...

... Sollten die aktuellen Bytes partout nicht lesbar sein, wird einfach weitergesprungen.
Werden MPEGs nicht paketweise gelesen? Dann müssten die fehlenden Bytes doch aufgefüllt werden.
Hab' mich etwas falsch ausgedrückt. Die fehlerhaften Bytes werden natürlich ersetzt.

mfg
Daniel
  Mit Zitat antworten Zitat
Kernel32.DLL
 
#9
  Alt 24. Jan 2005, 20:23
also:

=> AV beim Beenden des Programms: Ich konnte den Fehler lediglich mit deiner kompillierten Version reproduzieren. Bei mir (Delphi 5 Professional) ist der Fehler mit meiner kompillierten Version nicht reprduzierbar.

=> Zeile 648:
Integer(CW_USEDEFAULT), // Luckie: Wert verletzt untere Grenze Nö. Oder hatte das, was vorher dort stand die unteren Grenzen verletzt?

=> Warum hast du denn das hier gelöscht:

Delphi-Quellcode:
      hwndwrittenbytes := CreateWindowEx(0, 'STATIC', 'Geschriebene Bytes: N/A',
          WS_VISIBLE or WS_CHILD, 10, 150, 200, 15, hWnd, IDM_INFO, hInstance,
          nil);
mfg fürs erste
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#10
  Alt 24. Jan 2005, 20:30
Zitat von Kernel32.DLL:
also:

=> AV beim Beenden des Programms: Ich konnte den Fehler lediglich mit deiner kompillierten Version reproduzieren. Bei mir (Delphi 5 Professional) ist der Fehler mit meiner kompillierten Version nicht reprduzierbar.
Dann hab eich wohl etwas andere Compilereinstellungen oder D5 ist gutmütiger.

Zitat:
=> Zeile 648:
Integer(CW_USEDEFAULT), // Luckie: Wert verletzt untere Grenze Nö. Oder hatte das, was vorher dort stand die unteren Grenzen verletzt?
Das was vorher da stand, hat die untere Grenze verletzt.

Zitat:
=> Warum hast du denn das hier gelöscht:

Delphi-Quellcode:
      hwndwrittenbytes := CreateWindowEx(0, 'STATIC', 'Geschriebene Bytes: N/A',
          WS_VISIBLE or WS_CHILD, 10, 150, 200, 15, hWnd, IDM_INFO, hInstance,
          nil);
War ein versehen. Ist wohl beim Aufräumen passiert.

Aber kümmer dich doch mal um die wichtigen Sachen: Die kopierten Dateien sind größer als die originale und immer diese angeblichen fehlerhaften Bytes.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz