![]() |
Re: Datei mit TStream kopieren
so ich hab das jetzt mal umgemodelt, also das selbe was ich mit streams gemacht hab auf untypisierte Dateien und Blockread/Blockwrite umgebaut.
Delphi-Quellcode:
Das Ergebnis ist identsich. Statusbar läuft durch. Alle Befehle werden abgearbeitet, aber die Übertragung geht noch lange Zeit nach durchlauf der for Schleife weiter.
var FInput,FOutput: File;
i, buffersize,transferred:integer; buffer:array of Byte; begin buffersize:=strtoint(edit3.Text); AssignFile(FInput,edit1.Text); Reset(FInput,1); AssignFile(FOutput,edit2.Text); Rewrite(FOutput,1); setlength(buffer,buffersize); for i:=1 to floor(FileSize(FInput) / buffersize) do begin Blockread(FInput,buffer[0],buffersize,transferred); Blockwrite(FOutput,buffer[0],buffersize,transferred); Seek(FInput,i*buffersize); //Status Progressbar1.Position:= 100*i*buffersize div FileSize(FInput); label2.caption:=inttostr(i*buffersize) +' / '+ inttostr(FileSize(FInput)); Application.ProcessMessages; end; Progressbar1.Position:=100; label2.caption:=inttostr(FileSize(FInput)) +' / '+ inttostr(FileSize(FInput)); Mir fällt jetzt auch nix weiter mehr ein. Falls noch jemand eine Idee hat, her damit, ansonsten werd ich das Projekt begraben. |
Re: Datei mit TStream kopieren
Zitat:
Also ich hab mir jetzt mal die API Funktion WriteFile angeschaut. Da steht in der Dokumentation: Zitat:
Ich hab noch nie direkt mit den Windows API Funktionen gearbeitet (zum. nicht wissentlich ^^) Kann mir da vielleicht jemand weiterhelfen? |
Re: Datei mit TStream kopieren
Nein, denn für asynchronen Gebrauch muss CreateFile mit FILE_FLAG_OVERLAPPED aufgerufen worden sein - du arbeitest immer synchron, sofern du nichts anderes bei CreateFile sagst.
|
Re: Datei mit TStream kopieren
ok gut zu wissen. Aber ich arbeite ja nicht direkt mit den API Funktionen, sondern mit assignfile, blockwrite etc.
Woher weiss ich denn, was delphi mit diesen Fkt. macht? |
Re: Datei mit TStream kopieren
Einfach mal ein bisschen in System.pas stöbern. Nach weniger als einer Minute bin ich eben auf die Funktion TextOpen gestoßen, die, in der auskommentierten Pascal-Fassung (es wird zum Kompilieren Assembler verwendet), die Zeile
Delphi-Quellcode:
enthält. Also kein FILE_FLAG_OVERLAPPED im vorletzten Parameter.
CreateFileA(t.Name, OpenMode, FILE_SHARE_READ, nil, Flags, FILE_ATTRIBUTE_NORMAL, 0);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz