Forum: Win32/Win64 API (native code)
by Luckie,
29. Mär 2008
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. :thumb:
Forum: Win32/Win64 API (native code)
by Luckie,
29. Mär 2008
Was passiert denn da im Debugger? Und wenn dann würde ich eventuell gleich
SizeOfParts := GetDlgItemInt(hDlg, IDC_EDT_SIZE, Translated, False);
SizeOfParts := SizeOfParts * 1024 * 1024;
das rausmachen. Könntets du das bitte noch mal eben testen?
Forum: Win32/Win64 API (native code)
by Luckie,
29. Mär 2008
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.
Forum: Win32/Win64 API (native code)
by Luckie,
29. Mär 2008
Hm. :gruebel:
Danke schon mal für den Hinweis. Mal sehen, ob ich da was finden kann.
Forum: Win32/Win64 API (native code)
by Luckie,
29. Mär 2008
Zu früh gefreut:
Aber Int64 müsste doch einen größeren Wertebereich haben oder?
Aktuelle Version im Anhang.
Forum: Win32/Win64 API (native code)
by Luckie,
26. Mär 2008
Das hätte ich jetzt nicht gedacht, dass die Blockgröße einen Interger-Überlauf verursachen könnte. :shock:
Besten dank fürs Debuggen. :P
Forum: Win32/Win64 API (native code)
by Luckie,
26. Mär 2008
Danke für das Angebot. Sourcen im Anhang.
Forum: Win32/Win64 API (native code)
by Luckie,
26. Mär 2008
Dann liegt der Hund in der Split-Funktion begraben. :gruebel:
Forum: Win32/Win64 API (native code)
by Luckie,
26. Mär 2008
Die Größe der Teilstücke hatte er auch richtig angezeigt oder war die schon falsch?
Forum: Win32/Win64 API (native code)
by Luckie,
26. Mär 2008
Mist. Dann muss ich noch mal weitersuchen.
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Ich habe es jetzt mal so geändert:
function CalcCntParts(const Filename: string; Size: Int64): Cardinal;
var
FileSize : Int64; // >4GB
begin
result := 0;
if Size > 0 then
begin
FileSize := GetFileSize(PChar(Filename));
if (FileSize > 0) and (FileSize div Size < High(Int64)) then
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Das sieht ganz nach einem Integer Überlauf aus. Aber wo? Das kann ja eigentlich nur hier passieren:
function CalcCntParts(const Filename: string; Size: Int64): Cardinal;
var
FileSize : Int64; // >4GB
begin
result := 0;
if Size > 0 then
begin
FileSize := GetFileSize(PChar(Filename));
if (FileSize > 0) and (FileSize div Size < High(Integer)) then
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
So, ich habe mal die vorgeschlagenen Änderungen gemacht. Anbei die aktuelle Exe.
Hätte jemand von euch genug Festplattenkapazität, um das bitte mal mit Dateien größer 6,6 GB und Teilstücken größer 2048 MB zu testen, eben wie inder Fehlermeldung im ersten Posting? Wäre sehr nett. Allerdings glaube ich nicht, dass die Änderungen etwas mit dem Fehler zu tun haben.
Mir fällt gerade ein, kann es...
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Sieht bei mir so aus:
function GetFileSize(Filename: String): Int64;
var
fFile : THandle;
wfd : TWIN32FINDDATA;
begin
result := -1;
if not FileExists(Filename) then
exit;
fFile := FindFirstfile(pchar(Filename), wfd);
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Ich glaube, bei der for-Schleife dürfte es keine Problme mit dem Wertebereich geben. Wer will eine Datei schon in 2^32 Teile teilen. ;)
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Das ist das Problem. Ich habe keine Partition mehr übrig mit genügend Platz. ;)
Forum: Win32/Win64 API (native code)
by Luckie,
25. Mär 2008
Habe folgende Mail bezüglich großer Dateien und meines FileSplitters bekommen:
Das wundert mich etwas, da ich eigentlich überall mit Int64 arbeite, wenn es um die Dateigrößen etc. geht. Hier mal die relevanten Codeauschnitte:
function SplitFile(Filename, DestFolder: string; SplitSize, CntParts: Int64): Integer;
function GetClusterSize(Drive: Char): Cardinal;
var
...