![]() |
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:
Wobei ich mit Sharemode und desiredaccess bereits alle Varianten durchgespielt habe.
FileHandle:=Integer(Windows.CreateFile(PChar(editDateinamen.Text),
DesiredAccess, ShareMode, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) ); Anschließend wird der entsprechende Bereich gesperrt:
Code:
Egal was ich jetzt mache, und wie ich mit den Attributen des zweiten Programms spiele, ich kann nicht mehr auf diesen Bereich zugreifen.
Windows.LockFile(FileHandle,o.Offset,o.OffsetHigh,128,0);
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: ![]() Das hier habe ich dazu auch noch gefunden, kanns aber irgendwie nicht nachbauen, so dass es funktionieren würde: ![]() Wenn irgendjemand eine Idee für mich hätte wäre ich dankbar :) |
AW: Gelockte Datei trotzdem lesen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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. |
AW: Gelockte Datei trotzdem lesen
Zitat:
|
AW: Gelockte Datei trotzdem lesen
Zitat:
Jetzt weiß ich wie du diese Menge Beiträge zusammenbekommen hast :lol: |
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.
|
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. |
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:
Ich hoffe, dass es damit etwas klarer geworden ist? |
AW: Gelockte Datei trotzdem lesen
Zitat:
|
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. |
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:
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.
Wenn man eine Datei "offiziell" für Schreibzugriffe sperren will, dann offnet man sie und gewährt bei ShareMode nur den Lesezugriff.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 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