AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gelockte Datei trotzdem lesen

Ein Thema von Stefan H · begonnen am 16. Dez 2010 · letzter Beitrag vom 20. Dez 2010
Antwort Antwort
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#1

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 11:12
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 reinschreibt. Außerdem will ich aber, und das ist das ungewöhnliche an der Sache, den selben Datensatz, während er vom einen Prozess für Schreibzugriffe gesperrt ist, lesen können. Mit allen Risiken die dabei entstehen können, wie dass der eine Prozess einen halb alten und halb neuen Datensatz liest, weil der andere gerade währenddessen reinschreibt.
Und warum können sich deine Prozesse nicht an eine Konvention halten und bspw. per Mutex oder Semaphore den Zugriff regeln?

Nochmals: wenn du es machst wie Filehex, mußt du die MFT parsen und brauchst Adminrechte. Zusätzlich agierst du dabei am Dateisystemtreiber vorbei, womit du ein sehr seeeeehr riskantes Spielchen mit deinen Daten spielst. Und Datenintegrität ist üblicherweise eine der der Grundsäulen des Datenbankdesigns.

Abgesehen davon scheinst du zu übersehen, daß MSDN-Library durchsuchenLockfile den Zugriff für andere Prozesse komplett verhindert. Der eigene Prozeß darf aber weiterhin zugreifen. Also selbst bei deiner neuesten Problembeschreibung sehe ich kein Problem. Wenn der einzige Prozeß welcher schreibend zugreift die Datei mit GENERIC_READ öffnet, dürfen alle anderen weiterhin lesen. Und siehe da, es klappt. Wenn die Prozesse welche schreibend zugreifen dürfen wechseln, solltest du entweder dein Design komplett überdenken oder dich ernsthaft mit IPC-Mechanismen auseinandersetzen.

Und ich kann nicht glauben, dass es dafür keine Lösung gibt, weil Notepad mir die entsprechenden Dateien ohne irgendeine Meldung anzeigt.
Ja und? Du gibst schließlich FILE_SHARE_READ mit. Natürlich können andere Prozesse es dann lesen.

Wenn Windows ein Opensource-Projekt wäre, würde ich ja einfach nachschauen wie Notepad die Dateien öffnet, aber ganz so einfach ist es ja nciht
Dazu braucht's nur einen Disassembler und RCE-Kenntnisse. Wenn ich mich recht entsinne, benutzten die MMFs, da diese eben auch ermöglichen große Dateien halbwegs performant zu öffnen.

Zuguterletzt kannst du nachgucken wie Bei Google suchenSQLite es macht, denn dort funktioniert es auch ohne die Vista-APIs und die Lösung steht damit bereit. Aber die absolut einfachste Methode ist es einfach SQLite zu benutzen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Stefan H

Registriert seit: 8. Sep 2010
19 Beiträge
 
Delphi XE Professional
 
#2

AW: Gelockte Datei trotzdem lesen

  Alt 20. Dez 2010, 06:33
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.

Und ich kann nicht glauben, dass es dafür keine Lösung gibt, weil Notepad mir die entsprechenden Dateien ohne irgendeine Meldung anzeigt.
Ja und? Du gibst schließlich FILE_SHARE_READ mit. Natürlich können andere Prozesse es dann lesen.
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 völlig schmerzfrei

Zitat:
Aber die absolut einfachste Methode ist es einfach SQLite zu benutzen.
Ja, das mag sein, aber wie oben schon erwähnt lässt sich das nicht auf die schnelle Umstellen.

Mal sehen wie das mit den Mutexen läuft, wenn das klappt bin ich durchaus erstmal zufrieden

Danke soweit schonmal an alle, insbesondere natürlich an dich, Assarbad!

Geändert von Stefan H (20. Dez 2010 um 06:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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