![]() |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Zitat:
![]() Es kommt dann vermutlich die Fehlermeldung: "The process cannot access the file because it is being used by another process." |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
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. |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Zitat:
|
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Hmm schade, in meinem Beispiel war das jetzt der Adobe Reader.
Gibt es denn eine andere Möglichkeit??? |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Zitat:
|
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
Eine Datei zu einer internen Liste hinzufügen, die dann beim Schließen der Anwendung automatisch gelöscht werden. Allerdings geht das nur, wenn die Datei nicht auch noch in einer externen Anwendung geöffnet ist.
TemporaryFilesManager.Add(aFilenameWithFullPath);
|
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Hallo Peter,
danke, das funktioniert perfekt. Schön wäre jetzt noch eine Möglichkeit, die temporäre(n) Datei(en) zu löschen die nicht gelöscht werden konnten, weil die Applikation noch offen war, aber das könnte man ja mit einem geplanten Task evtl. lösen. |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Zitat:
Was Du relativ leicht machen kannst ist folgendes: lege die temporären Dateien in einem Unterordner des temp-Verzeichnisses ab. Den kannst Du dann einfach bei jedem Programmstart leerputzen, damit bleiben die nicht gelöschten Dateien nur bis zur nächsten Session liegen. |
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Klasse Tip, genau so mache ich das mal. Danke Dir!
|
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
Hmm..
Alternative: MoveFileEx(PChar(YourFileToDelete), nil, MOVEFILE_DELAY_UNTIL_REBOOT) Erzeuge deine Dateien ganz normal und rufe dann direkt hierfür die obrige MoveFileEx funktion auf. Nun dein ShellExecute und die Datei kann geöffnet/Angezeigt werden. Beim nächsten Reboot von Windows werden diese Dateien gelöscht. Ist nicht schön, dass dies erst beim Reboot erfolgt, aber immerhin.. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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