Einzelnen Beitrag anzeigen

CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#22

AW: Delphi Indy Datei via URL downloaden und temporär öffnen?

  Alt 26. Jun 2019, 09:51
Hallo zusammen,

ich lade die Datei momentan so herunter in einen MemoryStream:

Delphi-Quellcode:
    Stream := TMemoryStream.Create;
    IdHTTP.HandleRedirects := True;
    IdHTTP.Get('http://192.168.178.244/restapi/index.php/document/4/content', Stream);
    Memo1.Text := IdHTTP.Response.RawHeaders.Text;
    ResponseFileNameTemp := StringReplace(IdHTTP.Response.RawHeaders.Values['Content-Disposition'], 'attachment; filename="', '', [rfReplaceAll]);
    ResponseFileName := StringReplace(ResponseFileNameTemp, '"', '', [rfReplaceAll]);
    Stream.SaveToStream(CreateUnbuffedFilestream(GetSpecialFolder(CSIDL_APPDATA) + '\' + ResponseFileName));

Die Funktion "CreateUnbufferedFilestream" sieht so aus:

Delphi-Quellcode:
function CreateUnbuffedFilestream(const filename:string):TStream;
var FileHandle, hnd : THandle;
begin
  FileHandle := CreateFile(PChar(filename), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0);
  if hnd <> INVALID_HANDLE_VALUE then begin
    result := THandleStream.Create(FileHandle);
    ShellExecute(Application.Handle, 'open', PChar(filename), nil, nil, sw_show);
  end else
    result := nil;
end;

Das funktioniert soweit jedoch kann die Dtaei mittels ShellExecute nicht geöffnet werden. Bekomme da immer die Meldung dass die Datei in Benutzung ist.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com

Geändert von CG2003 (26. Jun 2019 um 10:31 Uhr)
  Mit Zitat antworten Zitat