AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit TStream kopieren

Ein Thema von Antigo · begonnen am 21. Nov 2007 · letzter Beitrag vom 24. Nov 2007
Antwort Antwort
Seite 3 von 3     123   
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#21

Re: Datei mit TStream kopieren

  Alt 22. Nov 2007, 18:14
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:
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));
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.

Mir fällt jetzt auch nix weiter mehr ein. Falls noch jemand eine Idee hat, her damit, ansonsten werd ich das Projekt begraben.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#22

Re: Datei mit TStream kopieren

  Alt 24. Nov 2007, 12:41
Zitat von sirius:
Nicht wirklich.

Die delphieigenen Funktionen:
-assignfile
-resetfile
-rewrite
-closefile
arbeiten wie TFileStream / THandleStream sehr direkt über die WinAPI-Funktionen CreateFile, WriteFile, ReadFile und SetFilePointer
es lässt mich nicht los ^^

Also ich hab mir jetzt mal die API Funktion WriteFile angeschaut. Da steht in der Dokumentation:
Zitat:
WriteFile Function


Writes data to the specified file at the position specified by the file pointer. This function is designed for both synchronous and asynchronous operation.
Also kann es sehr wohl sein, dass das ganze bei mir asynchron arbeitet.

Ich hab noch nie direkt mit den Windows API Funktionen gearbeitet (zum. nicht wissentlich ^^)

Kann mir da vielleicht jemand weiterhelfen?
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Datei mit TStream kopieren

  Alt 24. Nov 2007, 13:11
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#24

Re: Datei mit TStream kopieren

  Alt 24. Nov 2007, 13:30
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?
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Datei mit TStream kopieren

  Alt 24. Nov 2007, 13:52
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
CreateFileA(t.Name, OpenMode, FILE_SHARE_READ, nil, Flags, FILE_ATTRIBUTE_NORMAL, 0); enthält. Also kein FILE_FLAG_OVERLAPPED im vorletzten Parameter.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 12:26 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