Liebe Delphi-Fans,
habe folgendes Problem:
Mein aktuelles Projekt ist eine Software,
die große Dateien in mehrere kleine Dateien zerlegen und auch wieder zu einer Datei zusammenfügen kann (Ja, ich weiß, das
Rad immer wieder neu erfinden..., aber da ich schon seit längerer Zeit nicht mehr Delphi programmiert hab, muss ich wieder reinkommen).
Soviel zum Prolog...
In meinem Delphi 4 - Buch stehen ein paar Dinge, aber nichts richtig konkretes.
Problem 1:
Die Software soll möglichst wenig Arbeitsspeicher verwenden (auch wenns dadurch vielleicht bisl länger dauert...), das ist eigentlich die Vorraussetzung. Welche Methode würdet
ihr da empfehlen ? (
mit Streams, Memory Mapped Files, oder sonst was ?)
Problem 2:
Ein Stück quellcode liegt bei. Der Code zählt die Anzahl der Datensätze einer Datei:
Delphi-Quellcode:
Exists := false;
Pos := 0;
if (FileExists(Edit1.Text)) =true then
begin
Res:=DisableWriteProtection(Edit1.Text); //Schreibschutz aufheben
[b] Edit4.Text := 'Waiting...';[/b]
try //Anzahl der Datensätze ermitteln
AssignFile(F, Edit1.Text); //Dateipointer zuweisen
Reset(F); //Datei öffnen
Seek(F,0); //Satzzeiger an Anfang
While (EOF(F)) = false do
begin
Pos := Pos+1;
Seek(F, Pos);
end;
Edit4.Text := IntToStr(Pos);
finally
CloseFile(F);
end;
Der Code funktioniert, auch die Anzahl der Datensätze werden korrekt zurückgegeben. Da der Benutzer aber nicht denken, soll, dass sich der Computer aufgehängt hat, soll im Edit4-Feld vor dem Beginn der while-Schleife ein 'Waiting' angezeigt werden. Nach Durchlauf der While-Schleife wird das 'Waiting' durch die Anzahl der Datensätze ersetzt.
Seltsamerweise
wird im Edit4-Feld aber kein 'Waiting...' angezeigt, sondern nur die Anzahl der Datensätze, wenn die while-Schleife beendet ist. Hab schon versucht, den Befehl "Edit4.Text := 'Waiting'" an eine andere Stelle innerhalb des try-finally-Blocks zu setzen, aber auch das geht nicht. Was ist da los ?
Vielen, vielen Dank