![]() |
Re: Datei exklusiv öffnen
klappt leider auch nicht
Delphi-Quellcode:
geht leider auch nicht :(
FreeAndNil(fs);
ShellExecute(0, 'OPEN', PChar(FILE_NAME),nil,nil,0); fs:=TFileStream.Create(FILE_NAME, fmOpenRead); |
Re: Datei exklusiv öffnen
Schreib' mal, was genau nicht klappt..
Grüße, Messie |
Re: Datei exklusiv öffnen
da kommt eben die meldung, dass die datei durch einen anderen prozess genutzt wird und nicht geöffnet werden kann
wenn ich fs.create() weglasse geht es das ist aber klar |
Re: Datei exklusiv öffnen
das was du vor hast geht einfach nicht. Denn sobald die Datei gestartet ist, ist sie in Verwendung und somit kannst du nicht mehr die Datei sperren weil Sie von einem anderen Process teilweise gesperrt ist.
|
Re: Datei exklusiv öffnen
das habe ich befürchtet...kann ich denn überhaupt die Datei sperren, wenn sie von einem bestimmten Programm geöffnet wird..sie zum Beispiel wordpad..solange eben wordpad auf die Datei zugreift kann man nicht separat zugreifen.
Das würde mir auch sehr weiterhelfen. |
Re: Datei exklusiv öffnen
Zitat:
Delphi-Quellcode:
fs := TFilestream.create(...); //bei FormCreate
//in Deiner Routine wo Du die externe Datei aufrufst: freeandnil(fs); application.processmessages;//das können auch viel mehr als ein paar hundert Prozessorschritte sein... if ShellExecute(Application.Handle,'Open',PChar(filename),nil,nil,SW_ShowNormal)> 0 then begin //Shellexecute wartet auf die Beendigung des Aufrufs und gibt das Handle der aufgerufenen Datei zurück... //...habe ich wenig Erfahrung mit, schau Dir mal Beispiele an end; application.processmessages; fs := TFilestream.create(...); |
Re: Datei exklusiv öffnen
das geht auch nicht..ist auch logisch, denn egal was als Ergebnis ist, sobald das Programm versucht die Datei zu starten ist der Prozess auf Öffnen und zeitgleich wird der Zugriff gesperrt..ist wohl wie dein Vorredner sagte..unmöglich umzusetzen :(
Delphi-Quellcode:
komischerweise geht das ganze, wenn ich Application.Run mache...jedoch werden die Rechte dann nicht wie es sollte zugrückgesetzt und die Datei ist frei kopierbar.
procedure TForm1.Button1Click(Sender: TObject);
begin freeandnil(fs); ShellExecute(Application.Handle, 'OPEN', PChar(FILE_NAME),nil,nil,fmShareExclusive); //Application.Run; fs:=TFileStream.Create(FILE_NAME, fmShareExclusive); |
Re: Datei exklusiv öffnen
Zitat:
Du möchtest ja "irgendeine" Datei (also eine vom Programm unabhängige Datei) für den Zugriff sperren. Das geht, wissen wir ja. Du möchtest diese "irgendeine" Datei aber auch mit Shellexecute ausführen, also mußt Du sie für diesen Zugriff freigeben. Das geht auch, vielleicht reicht processmessages nicht aus (könnte an Cache etc. liegen). In Zweifelsfall kann man ein sleep(100 oder so) nachschalten. Hinterher greifst Du dir die Datei wieder und sperrst sie. Also wenn ich Deine Aufgabe richtig verstanden habe, sollte es grundsätzlich gehen. Grüße, Messie |
Re: Datei exklusiv öffnen
im Grundegenommen ist das schon richtig nur kann ich sie nicht sperren, weil sie ja dann von meinem Programm benutzt wird..
somit gilt leider..Sperrung möglich wenn mein Programm an der Datei nichts macht..wenn ich diese Öffnen will muss die solange ohne zugriffsicherung bleiben, bis ich sie nicht mehr brauche..und das bringt mir ergo nichts . |
Re: Datei exklusiv öffnen
Moin Zusammen,
Zitat:
ShellExecute gibt einen Rückgabewert von > 32 wenn der Aufruf erfolgreich war, oder einen Wert <= 32 wenn ein Fehler aufgetreten ist. ( ![]() Die bei Delphi mitgelieferten Teile des SDK sind nicht gerade aktuell, besser wäre es, nach Möglichkeit, das aktuelle PSDK bei MS herunterzuladen (nach Möglichkeit, da ca. 350MB, bei vollem Download) @Avax2k: Das Problem wirst Du wohl nur lösen können, wenn Du die Datei selber verarbeitest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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