Delphi-PRAXiS
Seite 3 von 4     123 4      

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 22:03

Re: Datei exklusiv öffnen
 
könnte ich es auch lösen indem ich einfach die Befehle von Windows abfange, bevor diese ausgeführt werden ? sprich jemand klickt auf kopieren und dann bei einfügen fängt das programm den Befehl ab und sagt nein..dabei würde es reichen das spezifisch auf den Dateinamen zu machen ...


genial wäre es, wenn ich in Windows komplett den "Kopieren"- Modus abschalten könnte solange mein Programm läuft wäre das umsetzbar?

marabu 20. Jan 2006 13:17

Re: Datei exklusiv öffnen
 
Ich frage halt nochmal nach: wie groß ist die Datei? Welchen Typ Daten enthält sie - Text, binär, strukturiert? Wie wird sie erstellt? Willst du die Datei nur vor fremden Zugriff schützen, während dein Programm läuft? Was ist mit der Datei, wenn dein Programm beendet wird?

Warum das ganze? Wenn du die richtigen Antworten auf diese Fragen gibst, dann gibt es vielleicht einen völlig anderen Lösungsansatz.

Grüße vom marabu

messie 20. Jan 2006 14:02

Re: Datei exklusiv öffnen
 
Zitat:

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

In der API- Hilfe steht:

Zitat:

Return Values

If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
If the function fails, the return value is an error value that is less than or equal to 32. The following table lists these error values:
Nur wartet die Funktion nicht, bis die Datei freigegeben ist, sondern gibt das Handle nach dem erfolgreichen Öffnen zurück. Damit ließe sich überwachen, wie lange die Datei in Gebrauch ist, um sie nach Benutzung wieder zu sperren. Aber ich weiß noch nicht, was Avax2k genau vorhat, jedenfalls ist es geheimnisvoll...

Grüße, Messie

Luckie 20. Jan 2006 14:12

Re: Datei exklusiv öffnen
 
Und das steht im aktuellen PSDK:
Zitat:

Return Value

Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.
Und deswegen hat Christian daraufhingewiesen, dass man sich auf die veraltete WINAPI Hilfe, die mit Delphi ausgeliefert wird, nicht verlassen soll. ;)

Avax2k 20. Jan 2006 14:25

Re: Datei exklusiv öffnen
 
Zitat:

Ich frage halt nochmal nach: wie groß ist die Datei? Welchen Typ Daten enthält sie - Text, binär, strukturiert? Wie wird sie erstellt? Willst du die Datei nur vor fremden Zugriff schützen, während dein Programm läuft? Was ist mit der Datei, wenn dein Programm beendet wird?

Warum das ganze?
1. Die Datei ist ca. 2MB
2. Datentyp ist Text
3. Wird beim Ausführen des Programmes erstellt indem sie umgewandelt wird und auf Platte geschrieben wird
4. Ja will einfach nur nicht, dass man sie kopieren kann..
5. Beim Programmende wird sie gelöscht

6. Der Grund ist wie gesagt, dass ich es verhindern möchte dass jemand die textdatei kopiert und ohne mein Programm benutzen kann.
Wenn ich wissen würde welche Date in Windows fürs Dateikopieren verantwortlich ist könnte ich diese mit FileStream zuweisen und das reicht auch vollkommen aus.
XCOPY.EXE ist es schonmal nicht..muss irgendeine andere datei sein die das macht.

messie 20. Jan 2006 14:49

Re: Datei exklusiv öffnen
 
Dann willst Du sie während der Programmausführung also im Windows-Editor-Fenster öffnen... was wenn Du auf Shellexecute verzichtest und dir selber einen Editor baust (gibts bestimmt auch fertig), kannst Du die Datei bei Start besetzen und zum Ende freigeben und dann löschen.

Grüße, Messie

Avax2k 20. Jan 2006 14:56

Re: Datei exklusiv öffnen
 
das wäre auch eine Möglichkeit nur einziges Problem dabei ist eben die Umsetzung, sprich um das zu realisieren müsste ich etwas größeres Schreiben.. dabei habe ich schon sowieso sehr viel um die Ohren. Wenn nun niemand einen Lösungsweg hat werde ich dies wohl dann auch tun müssen..mal abwarten :D

marabu 20. Jan 2006 15:59

Re: Datei exklusiv öffnen
 
Wenn du jetzt alle deine Anforderungen offen gelegt hast, dann frage ich mich warum du die Datei überhaupt erst im Dateisystem ablegen willst. Wenn nur deine Anwendung Zugriff haben soll, dann kannst du sie doch einfach in einen TMemoryStream schreiben und diesen so verwenden, als ob es eine Datei auf der Festplatte sei.

marabu

H4ndy 20. Jan 2006 16:20

Re: Datei exklusiv öffnen
 
Zitat:

Zitat von marabu
Wenn nur deine Anwendung Zugriff haben soll, dann kannst du sie doch einfach in einen TMemoryStream schreiben und diesen so verwenden, als ob es eine Datei auf der Festplatte sei.

So würde ich das auch machen. Da du die Datei selbst erstellst, kannst du Sie doch auch gleich
selber verarbeiten. Eine Textdatei anzuzeigen dürfte nun wirklich nicht so schwer sein, oder? :gruebel:

Um das Kopieren zu sperren, müsstest du einen nicht gerade trivialen Windows-Hook schreiben.
Ich fände es übrigends nicht wirklich prickelnd, wenn ein Programm mir das kopieren von Dateien
verbieten würde...

SirThornberry 20. Jan 2006 16:44

Re: Datei exklusiv öffnen
 
ein Programm wie Notepad ist doch nicht schwer umzusetzen, vor allem nicht wenn du speichern, öffnen, drucken etc. weglässt. Dann brauchst du nur ein form bauen, darauf ein TRichEdit (vielleicht reicht sogar ein TMemo) und darin deinen Text anzeigen.

Ich denke jedoch das du allgemein den falschen Lösungsansatz hast. Denn du brauchst ja auch ein weilschen vom erstellen der Datei bis zum exclusiven öffnen mit TFileStream. Und in der zwischenzeit kann die Datei schon gelesen werden. Du solltest also versuchen vollständig auf das schreiben auf die Festplatte zu verzichten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 Uhr.
Seite 3 von 4     123 4      

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