Einzelnen Beitrag anzeigen

Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Kopierprozess (Upload) mit Blockread wie korrekt beenden?

  Alt 3. Jan 2007, 15:42
Hallo zusammen!

ich versuche gerade, ein FTP-Upload mit Progressbar
auf Basis der WinInet umzusetzen (die Indy-Komponenten
halte ich hier für übertrieben).

Dies funktioniert in dem Sinne, dass immerhin Bytes
hochgeladen werden und sich die Progressbar bewegt.


Nur: Es hört nicht mehr auf!
Ich will die Schleife eigentlich beenden, wenn die
Dateigröße = GesamtGeleseneBytes ist.

Ohne diese Abfrage gibt es einen Fehler und es heißt
sinngemäß: "Kann nicht über das Dateiende hinaus lesen"


Weiß hier jemand Rat? Danke für Eure Hilfe!

Pfoto


Delphi-Quellcode:
  
uses WinInet;

const
  BUFFERSIZE = 4096;

var
  buffer: array[0..WRITE_BUFFERSIZE - 1] of Char;
  bufsize: DWORD;

  NumberOfBytesRead,
  NumberOfBytesWritten: DWord;

  SizeFile, TotalBytesWritten: longint;


[...]

    { Dateigröße der lokalen Datei }
    SizeFile := FileSize(LocalFile);

    { Insgesamt gelesene Bytes }
    TotalBytesWritten := 0;

    bufsize := WRITE_BUFFERSIZE;

    repeat
      BlockRead(LocalFile, buffer, bufsize, NumberOfBytesRead);

      if not InternetWriteFile(hFile,
                              @buffer,
                              WRITE_BUFFERSIZE,
                              NumberOfBytesWritten) then FCancelProcess:= true;

      TotalBytesWritten := TotalBytesWritten + bufsize;

      { Hier Prozentanzeige ermitteln und ausgeben }

    until (TotalBytesWritten = SizeFile) or (FCancelProcess = true);

[...]
Jürgen Höfs
  Mit Zitat antworten Zitat