Ich sehe nicht, wo da irgendetwas gespeichert wird. Du liest den Inhalt einer Webseite in einen Stream und gibst den gleich wieder frei. Dazwischen müsste der Stream seinen Inhalt aber erstmal noch speichern (s. Write oder WriteBuffer).
Lies doch erstmal den Text der Online-Hilfe zu
TFileStream.Create, bevor du da was behauptest:
fmCreate – Erstellt eine Datei mit dem angegebenen Namen. Ist eine Datei mit diesem Namen bereits vorhanden, wird die Datei zum Schreiben geöffnet.
Das heißt: In dem Moment, in dem du in einen geöffneten Filestream was reinschreibst, wird das auf Platte geschrieben. Ich mach das seit Jahr und Tag mit meiner Blob-To-File-Funktion ganz genau so:
Delphi-Quellcode:
Function TDatMod.BlobFeldInDatei(Feld: TField; Datei:
String): Boolean;
Var
S : TStream;
FileS : TFileStream;
begin
Result := False;
If Not Feld.IsBlob
Then
Begin
GLD.Fehlertext := '
Das angegebene Feld ist kein Blobfeld.';
Exit;
End;
If Feld.IsNull
Then
Begin
GLD.Fehlertext := '
Im angegebenen Blobfeld des aktuellen Records befinden sich keine Daten.';
Exit;
End;
S := Feld.DataSet.CreateBlobStream(Feld, bmRead);
FileS := TFileStream.Create(Datei, fmCreate);
Try
Try
FileS.CopyFrom(S, S.Size);
Result := FileExists(Datei);
Except
on e:
exception Do
Begin
GLD.FehlerText := '
Fehler bei BlobToFile: ' + e.
Message;
Result := False;
End;
End;
Finally
S.Free;
FileS.Free;
End;
end;
Außerdem gibst du dem Stream beim create lediglich ein Verzeichnis an und keinen vollständigen Dateinamen.
Das dürfte wohl eher die Fehlerursache sein ...