Forum: Win32/Win64 API (native code)
by Stefan H,
20. Dez 2010
Danke für das Stichwort mit den Mutexen, das könnte wirklich eine Lösung sein. Die Dateisperrenlösung hatte zwar den Charme, dass dann auch Programme die nicht von uns sind nicht darauf zu greifen können, aber das ist verschmerzbar.
Eben nicht, wenn ichs versuche im Wordpad oder Word zu öffnen, bekomme ich die Meldung, dass ein anderer Prozess die Datei gerade hält. Nur Notepad öffnet alles...
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
Ja, aber das gilt ja nur wieder für die ganze Datei, und ich muss einen einzelnen Datensatz innerhalb der Datei für Schreibzugriffe sperren können.
Eigentlich ist mein Wunsch ganz einfach: Ein Prozess soll einen Datensatz zum bearbeiten, also für schreibenden Zugriff, anfordern können. Das muss ich den anderen Prozessen irgendwie mitteilen, damit kein zweiter mehr daherkommt und ebenfalls...
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
DesiredAcces wird nach folgendem Schema befüllt (die Form hat checkboxen über die ich auswählen kann wie ich die Datei öffnen will):
procedure TformLockReadable.buttonOpenClick(Sender: TObject);
var
DesiredAccess: Cardinal;
ShareMode: Cardinal;
begin
if FileHandle<>INVALID_HANDLE_VALUE then exit;
DesiredAccess:=0;
if checkboxAccessRead.Checked then DesiredAccess:=DesiredAccess...
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
Ich hab alle Kombinationen durch :)
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
LockFileEx zeigt das selbe Verhalten: Notepad kanns öffnen, über Delphi schaff ichs nicht die Datei zu lesen.
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
@TBx: Wir können das Projekt nicht mal eben kurz auf eine Datenbank umstellen, das wäre eine Aufgabe von Jahren :)
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...
Forum: Win32/Win64 API (native code)
by Stefan H,
17. Dez 2010
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...
Forum: Win32/Win64 API (native code)
by Stefan H,
16. Dez 2010
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:
FileHandle:=Integer(Windows.CreateFile(PChar(editDateinamen.Text),
...