Einzelnen Beitrag anzeigen

bigg
(Gast)

n/a Beiträge
 
#7

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 18:07
Zur Zeit kann ich dir nur mit Assignfile dienen, die anderen habe ich nicht gesichert.

Delphi-Quellcode:
function TMD5Form.FileScan(const FileName: String): String;
const MAX_Buffer = 2048;
var AFile: File;
var i, ActSize, FSize, BufferSize, Blocks, Last: Integer;
var Buffer: Array[1..MAX_Buffer] of Byte; // Datenpuffer
var Context: MD5Context;
var Dig: MD5Digest;
var f, c: Extended;
begin
c := 0;
ActSize := 0;

if FileExists(FileName) then
begin

AssignFile(AFile, FileName);
FileMode := fmOpenRead or fmShareDenyNone;

{$i-}
Reset(AFile, 1);
{$i+}

if IOResult = 0 then
begin // Datei konnte geöffnet werden
MD5Init(Context);

    try
      FSize := FileSize(AFile); // Dateigröße in Byte

      if FSize <> 0 then
      begin
      Panel.Visible := True;
      OKBtn.Enabled := False;
      UserEdit.Enabled := False;

      Blocks := FSize div MAX_Buffer; // Anzahl max. Blöcke
      Last := FSize mod MAX_Buffer; // Größe des Rest-Puffer

      if Last <> 0 then
      inc(Blocks); // sofern, unser Restpuffer ungleich 0 Byte groß ist, wird unsere Blockvariable um 1 erhöht

      f := 100 / Blocks;

      for i := 0 to Blocks -1 do // Blöcke einlesen
      begin

        if CancelProcess then
        Break;

        Seek(AFile, ActSize); // Start-Position in Byte (wird von Block zu Block angepasst)

        inc(ActSize, MAX_Buffer);
        if ActSize <= FSize then
        BufferSize := MAX_Buffer else
        BufferSize := Last;

        c := c + f;

        ProgressBar.Position := Round(c);
        Application.ProcessMessages;

        BlockRead(AFile, Buffer[1], BufferSize);
        MD5Update(Context, @Buffer, BufferSize);
      end;

      end;

    finally
      CloseFile(AFile);
      Panel.Visible := False;
      OKBtn.Enabled := True;
      UserEdit.Enabled := True;
    end;

if CancelProcess then
Result := 'else
begin
  MD5Final(Context, Dig);
  Result := MD5Print(Dig);
end;

end;
end;
end;
  Mit Zitat antworten Zitat