AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) FileSplitter: Probleme mit großen Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

FileSplitter: Probleme mit großen Dateien

Ein Thema von Luckie · begonnen am 25. Mär 2008 · letzter Beitrag vom 29. Mär 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#31

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 15:26
Ich hab jetzt nochmal etwas nachgesehen, der Fehler kommt aus GetDlgItemInt (Zeile 519).
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#32

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 15:45
Ja, so was habe ich schon vermutet. Bin blos noch nicht dazu gekommen mir das näher anzugucken. Aber die Größe der Zahl aus dem Edit dürfte den Wertebereich vin Integer aber nicht übersteigen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#33

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 15:57
Ich habs gefunden
Hätte mir eigentlich auch eher auffallen müssen, gleiches hatte ich nämlich als ich mir die Dummy-Datei zum splitten erzeugt habe.

Mach einfach aus:
SizeOfParts := GetDlgItemInt(hDlg, IDC_EDT_SIZE, Translated, False) * 1024 * 1024; dies hier:
Delphi-Quellcode:
SizeOfParts := GetDlgItemInt(hDlg, IDC_EDT_SIZE, Translated, False) * 1024;
SizeOfParts := SizeOfParts * 1024;
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#34

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 16:02
Was passiert denn da im Debugger? Und wenn dann würde ich eventuell gleich
Delphi-Quellcode:
SizeOfParts := GetDlgItemInt(hDlg, IDC_EDT_SIZE, Translated, False);
SizeOfParts := SizeOfParts * 1024 * 1024;
das rausmachen. Könntets du das bitte noch mal eben testen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#35

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 16:13
Diese Variante geht auch. Warum Delphi ein problem dabei hat, verstehe ich auch nicht.
In diesem Fall steht in SizeOfParts die Größe der Parts wie sie im Editfeld steht.

Ich vermute stark, dass Delphi ein Problem beim Multiplizieren von Integer-Konstanten hat.

Folgendes funktioniert nämlich:
SizeOfParts := GetDlgItemInt(hDlg, IDC_EDT_SIZE, Translated, False) * round(1024.0) * round(1024.0);
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#36

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 18:12
Moin moin,
Zitat von Luckie:
Was passiert denn da im Debugger?
Delphi rechnet standardmäßig mit 32Bit Werten. Da die Funktion GetDlgItemInt einen 32 Bit Wert als
Result liefert und auch alle anderen Multiplikatoren Delphi zu nichts anderem veranlassen,
wird da auch weiter nichts berücksichtigt.
Du kannst es austesten, in dem du direkt den maximalen LongWord Wert anstelle der Funktion GetDlgItemInt
eingibst. Also:SizeOfParts := 1024*1024*4294967295; Jetzt "bemerkt" der Compiler den Überlauf und meckert das auch an.

Folgender Code weißt Delphi an, mit 64 Bit zu rechen,SizeOfParts := Int64(1024)*1024*4294967295; und voilà es lässt sich kompilieren + das Ergebnis stimmt.

Hier ist jetzt genau ein Wert mit bei, der vom Typ Int64 ist. Somit richtet der Compiler alles auf
64 Bit aus.

Es müsste also theoretisch ausreichen, einen Faktor in Int64 zu casten.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#37

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 18:41
Moin,

die Rechnung lautete zwar 4096 * 1024 * 1024 aber der Hintergrund bleibt ja der gleiche, da die beiden Konstanten im Bereich von 0 bis + ~4,2Mrd liegen nutzt Delphi einen vorzeichenlosen 32Bit Bereich. Ich war bisher immer der Meinung, dass der Compiler sich nach der "Ziel-Variable" richtet.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#38

Re: FileSplitter: Probleme mit großen Dateien

  Alt 29. Mär 2008, 20:17
Zitat von MrKnogge:
Ich war bisher immer der Meinung, dass der Compiler sich nach der "Ziel-Variable" richtet.
Das dachte ich bisher auch, deswegen hatte ich es ja so gemacht nd dem keine weitere Beachtung geschenkt.

Dann besten Dank noch mal fürs testen, Debuggen und Erklären.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 13:21 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