Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Datei exklusiv öffnen (https://www.delphipraxis.net/61307-datei-exklusiv-oeffnen.html)

Avax2k 19. Jan 2006 20:03

Re: Datei exklusiv öffnen
 
klappt leider auch nicht
Delphi-Quellcode:
FreeAndNil(fs);
ShellExecute(0, 'OPEN', PChar(FILE_NAME),nil,nil,0);
fs:=TFileStream.Create(FILE_NAME, fmOpenRead);
geht leider auch nicht :(

messie 19. Jan 2006 20:28

Re: Datei exklusiv öffnen
 
Schreib' mal, was genau nicht klappt..

Grüße, Messie

Avax2k 19. Jan 2006 20:30

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

SirThornberry 19. Jan 2006 20:45

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.

Avax2k 19. Jan 2006 20:53

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.

messie 19. Jan 2006 20:57

Re: Datei exklusiv öffnen
 
Zitat:

Zitat von Avax2k
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

Bau' mal Deinen Aufruf so um:
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(...);

Avax2k 19. Jan 2006 21:15

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:
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);
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.

messie 19. Jan 2006 21:34

Re: Datei exklusiv öffnen
 
Zitat:

Zitat von Avax2k
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 :(

Nö, muß meiner Meinung nach nicht sein.
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

Avax2k 19. Jan 2006 21:41

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 .

Christian Seehase 19. Jan 2006 21:50

Re: Datei exklusiv öffnen
 
Moin Zusammen,

Zitat:

Zitat von messie
//Shellexecute wartet auf die Beendigung des Aufrufs und gibt das Handle der aufgerufenen Datei zurück...

das stimmt nicht.
ShellExecute gibt einen Rückgabewert von > 32 wenn der Aufruf erfolgreich war, oder einen Wert <= 32 wenn ein Fehler aufgetreten ist.

(MSDN-Library durchsuchenShellExecute)

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.
Seite 2 von 4     12 34      

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