Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Gelockte Datei trotzdem lesen (https://www.delphipraxis.net/156846-gelockte-datei-trotzdem-lesen.html)

Stefan H 16. Dez 2010 21:31

Gelockte Datei trotzdem lesen
 
Hallo,
ich habe folgendes Problem: Ich will Teile einer Datei sperren, so dass nur ein Thread Schreibzugriff hat. Die anderen Threads/Programme sollen aber trotzdem auf diesen Bereich zugreifen können (auch auf die Gefahr hin, dass im entsprechenden Bereich dann Müll steht).
Bisheriger Ansatz: Ich öffne die Datei per:
Code:
  FileHandle:=Integer(Windows.CreateFile(PChar(editDateinamen.Text),
                                         DesiredAccess,
                                         ShareMode,
                                         nil,
                                         OPEN_EXISTING,
                                         FILE_ATTRIBUTE_NORMAL,
                                         0)
                                         );
Wobei ich mit Sharemode und desiredaccess bereits alle Varianten durchgespielt habe.

Anschließend wird der entsprechende Bereich gesperrt:
Code:
Windows.LockFile(FileHandle,o.Offset,o.OffsetHigh,128,0);
Egal was ich jetzt mache, und wie ich mit den Attributen des zweiten Programms spiele, ich kann nicht mehr auf diesen Bereich zugreifen.
Ansich wäre das soweit ja logisch, allerdings kann ich die Datei problemlos mit notepad öffnen und ansehen. Erst beim Speichern kommt es zum Fehler, dass die Date von einem anderen Prozess verwendet wird. Genau dieses Verhalten möchte ich nachbilden. Ich will aus meine Programm heraus trotz des Locks zugreifen, speichern will ich an dieser Stelle sowieso nicht.

Dieser Hexeditor kann das beispielsweise auch: http://www.flexhex.com/docs/howtos/locked-files.phtml

Das hier habe ich dazu auch noch gefunden, kanns aber irgendwie nicht nachbauen, so dass es funktionieren würde: http://www.flexhex.com/docs/howtos/locked-files.phtml

Wenn irgendjemand eine Idee für mich hätte wäre ich dankbar :)

Assarbad 16. Dez 2010 23:07

AW: Gelockte Datei trotzdem lesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Stefan H (Beitrag 1068988)
Dieser Hexeditor kann das beispielsweise auch: http://www.flexhex.com/docs/howtos/locked-files.phtml

So wie sich das liest, braucht man mindestens Adminrechte, vielleicht sogar überhaupt nur über einen Treiber.

So, mal kurz installiert:
Den Nachweis bzgl. erforderlichen Rechte findest du als angehängtes Bild. Meine Theorie wäre, daß dort die MFT geparst und die Cluster ermittelt werden welche der Datei gehören und diese dann ggf. ungecacht geschrieben werden.

Luckie 17. Dez 2010 01:57

AW: Gelockte Datei trotzdem lesen
 
Zitat:

Zitat von Stefan H (Beitrag 1068988)
Ich will Teile einer Datei sperren, so dass nur ein Thread Schreibzugriff hat. Die anderen Threads/Programme sollen aber trotzdem auf diesen Bereich zugreifen können.

Was denn jetzt? Sperren oder nicht sperren?

Assarbad 17. Dez 2010 02:07

AW: Gelockte Datei trotzdem lesen
 
Zitat:

Zitat von Luckie (Beitrag 1069014)
Was denn jetzt? Sperren oder nicht sperren?

Er will "cheaten". Das System veräppeln :stupid:

Jetzt weiß ich wie du diese Menge Beiträge zusammenbekommen hast :lol:

Luckie 17. Dez 2010 02:16

AW: Gelockte Datei trotzdem lesen
 
Vielleicht bin ich pedantisch, aber ich habe gehört, dass eine gute, exakte Problembeschreibung manchmal recht hilfreich sein soll beim Helfen. Darauf wollte ich eigentlich hinweisen. Und wenn man sich dann mal hinsetzt und versucht sein Problem mal klar und verständlich zu formulieren, dann kommt man manchmal schon von alleine auf die Lösung oder man stellt fest, dass die Formulierung Mist ist.

Assarbad 17. Dez 2010 03:42

AW: Gelockte Datei trotzdem lesen
 
Schon klar, aber verständlich war es schon. Er wollte eine Dateisperre umgehen.

Kritik ist da bei anderen Fragestellungen wo man nichtmal Kontext geboten bekommt und wo der Fragesteller danach die Diskutanten mit jeweils einem Satz in der Antwort (dafür aber x Antworten) abfrühstückt eher angebracht.

Stefan H 17. Dez 2010 06:35

AW: Gelockte Datei trotzdem lesen
 
Guten Morgen,
danke schonmal soweit für die Antworten.

Um das nochmal zu konkretisieren: Ich habe eine Anwendung, in der sehr viele Daten in eine Datei geschrieben werden (eigentlich eine Datenbank). Dabei muss sichergestellt sein, dass immer alle Daten geschrieben werden können, die zu einer Transaktion gehören.
Daher wird, wenn ein Datensatz schreibend angefordert wird, der entsprechende Datensatz exklusiv gelockt.
Das Ganze wird aber sehr langsam, wenn jemand eine Routine ausführt, die zwischen dem Laden und dem Speichern viele Berechnungen durchführt. In dieser Zeit können andere Nutzer nicht auf diesen Datensatz zugreifen, also auch keine Auswertungen machen, bei denen es nicht so tragisch wäre, wenn ein Datensatz Müll ist, weil gerade in diesem Moment der Schreibzugriff stattfindet.
Daher brauche ich einerseits die Möglichkeit den Datensatz zu locken, damit keine zwei Prozesse zeitgleich schreiben können, andererseits kann ich dann (was für die meisten Andwendungen auch Sinn macht, für mich jedoch nicht) nicht mehr lesend auf den Datensatz zugreifen.
Ich könnte mich ja damit abfinden, dass das auf diesem Weg nicht geht, allerdings kann ich nicht akzeptieren, dass so ein kleines Programm wie Notepad diese Dateien einfach so öffnen kann :)

Kurzgesagt: Ich suche einen Weg, der mir einen Dateizugriff so ermöglicht wie Notepad ihn macht.
Assarbad hat das ganz gut zusammen gefasst
Zitat:

Zitat von Assarbad (Beitrag 1069015)
Zitat:

Zitat von Luckie (Beitrag 1069014)
Was denn jetzt? Sperren oder nicht sperren?

Er will "cheaten". Das System veräppeln :stupid:

Ich will sperren, und das anschließend umgehen, weil mir das Betriebssystem meines Wissens nach keine möglichkeit bietet eine reine Schreibsperre zu setzen, die Lesezugriffe erlaubt.

Ich hoffe, dass es damit etwas klarer geworden ist?

TBx 17. Dez 2010 06:48

AW: Gelockte Datei trotzdem lesen
 
Zitat:

Zitat von Stefan H (Beitrag 1069027)
(eigentlich eine Datenbank)

äähm, warum verwendest Du nicht eine solche? Genau für solche Fälle ist doch das Transaktionshandling von Datenbanken da! :gruebel:

himitsu 17. Dez 2010 06:57

AW: Gelockte Datei trotzdem lesen
 
Wenn man eine Datei "offiziell" für Schreibzugriffe sperren will, dann offnet man sie und gewährt bei ShareMode nur den Lesezugriff.

> über andere Datei-Handle (also auch andere Programme) kann man die Datei auslesen
> aber schreiben und löschen kann dann kein Anderer.


@Assarbad: ich müßte mal probieren, ob mein XP-Trick noch geht ... jedenfalls konnte ich unter XP eine Datei öffnen (ohne Adminrechte und sonstige Tricks) und andere Programme konnten diese Datei (danach) dennoch exclisiv öffnen.

Stefan H 17. Dez 2010 07:32

AW: Gelockte Datei trotzdem lesen
 
@TBx: Wir können das Projekt nicht mal eben kurz auf eine Datenbank umstellen, das wäre eine Aufgabe von Jahren :)

Code:
Wenn man eine Datei "offiziell" für Schreibzugriffe sperren will, dann offnet man sie und gewährt bei ShareMode nur den Lesezugriff.
Ja, das Problem ist aber ja, das nur einzelne Bereiche (eben immer genau ein Datensatz) gesperrt werden muss, die anderen Datensätz müssen weiterhin beschreibbar sein. Ich muss also beim ShareMode Read und Write setzen, und dann die Bereiche per Lockfile sperren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz