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?