Einzelnen Beitrag anzeigen

Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Streams haben "alte Daten"

  Alt 28. Jun 2005, 12:12
Hi...

Ich wollte mich mal näher mit Steams auseinandersetzen (hier mit TFilestream) und hab da ein Phänomenbeobachtet, dass ich mir vielleicht sogar erklären kann, jedoch nicht wirklich beheben.

Ich lade mehrer Dateien aus unserem IntraNet und speichere sie lokal. Da ich die Daten so "roh" nicht benutzen kann speichere ich sie als "foo.dat" ab, öffne sie an einer anderen Stelle wieder um den einstiegspunkt für meine Kopierroutine zu suchen und kopiere von einem TFileStream in einen anderen, der die Datei auch gleich so benennt, wie diese heissen soll. Danach lösche ich "foo.dat" wieder. Dieser Vorgang wiederholt sich in einer Schleife mehrmals mit unterschiedlichen Dateien.

Nun zu meinem Phänomen:
Beim zweiten Durchlauf steht in der variablen foo exakt der text der ersten datei, nicht der der neuen, aktuellen Datei... Warum?

Bissel Code:
Delphi-Quellcode:
procedure TForm1.getfile(Host, Source, FileName, Destination: String);
type
  TFooBytes = array of Byte;

var Foo: TFooBytes;
    ReadStream, WriteStream: TFilestream;
    i: Integer;
    Buffer: String;
    read, found: Boolean;
begin
  {.. Download der Datei und speichern in foo.dat ..}

  ReadStream:=TFilestream.Create(Destination+'foo.dat', fmOpenRead);
  setlength(Foo, 25); // in den ersten 25 Zeichen entscheidet sich ob die Datei so gültig ist oder nicht
  ReadStream.Read(Foo[0], 25);

  {.. Buffer ermitteln ..}

  if not found then
  begin
    ReadStream.Free;
    Deletefile(Destination+'foo.dat');
    exit;
  end;

  Buffer:=trim(Buffer);

  WriteStream:=TFilestream.Create(Destination+FileName, fmCreate);
  ReadStream.Seek(ReadStream.Size-StrToInt(Buffer), soFromBeginning);
  WriteStream.CopyFrom(ReadStream, StrToInt(Buffer));

  WriteStream.Free;
  ReadStream.Free;

  Deletefile(Destination+'foo.dat');
end;
Ich denke mir, dass der Reservierte Platz nicht wieder überschrieben wird, kann das sein? Was kann ich dagegen tun? Ich möchte nochmal anmerken, dass ich noch nicht soooo viel mit Streams gearbeitet hab. Vielleicht auch ein echt dummer fehler von mir...


Danke schonmal

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat