AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Streams haben "alte Daten"

Ein Thema von Tonic1024 · begonnen am 28. Jun 2005 · letzter Beitrag vom 28. Jun 2005
 
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, 11: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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz