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
Stefan H

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 07:54
LockFileEx zeigt das selbe Verhalten: Notepad kanns öffnen, über Delphi schaff ichs nicht die Datei zu lesen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#2

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 08:00
LockFileEx zeigt das selbe Verhalten: Notepad kanns öffnen, über Delphi schaff ichs nicht die Datei zu lesen.
Und wie genau sieht nun dein DesiredAccess/ShareMode aus?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Stefan H

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 08:01
LockFileEx zeigt das selbe Verhalten: Notepad kanns öffnen, über Delphi schaff ichs nicht die Datei zu lesen.
Und wie genau sieht nun dein DesiredAccess/ShareMode aus?
Ich hab alle Kombinationen durch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 08:03
Ich hab alle Kombinationen durch
Und Welche?

Vielleicht machst du ja was falsch? Und deswegen fragte ich ja auch danach.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Stefan H

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 08:21
DesiredAcces wird nach folgendem Schema befüllt (die Form hat checkboxen über die ich auswählen kann wie ich die Datei öffnen will):
Code:
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 or GENERIC_READ;
  if checkboxAccessWrite.Checked then DesiredAccess:=DesiredAccess or GENERIC_WRITE;

  ShareMode:=0;
  if checkboxShareRead.Checked then ShareMode:=ShareMode or FILE_SHARE_READ;
  if checkboxShareWrite.Checked then ShareMode:=ShareMode or FILE_SHARE_WRITE;

  FileHandle:=Integer(Windows.CreateFile(PChar(editDateinamen.Text),
                                         DesiredAccess,
                                         ShareMode,
                                         nil,
                                         OPEN_EXISTING,
                                         FILE_ATTRIBUTE_NORMAL,
                                         0)
                      );

  //FileHandle:=FileOpen(editDateinamen.Text,fmOpenReadWrite or fmShareDenyNone);

  if FileHandle=INVALID_HANDLE_VALUE then Showmessage(Format('Fehler beim Öffnen: %d',[GetLastError]));

  EnableButtons;

  ReadOnlyLocked:=False;
end;
Ich hab das ganze Testprojekt mal angehängt, als Delphi 2006 Version. Kann problemlos auf XE überführt werden, nur kam bei mir eine Meldung, dass ein Verweis nicht mehr gültig sei. Den einfach entfernen.

Edit: Sorry, musste sie nochmal kurz rausnehmen, ist jetzt wieder drin.
Angehängte Dateien
Dateityp: zip lockread.zip (234,8 KB, 4x aufgerufen)

Geändert von Stefan H (17. Dez 2010 um 08:28 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 09:08
Hi,

vielleicht verstehe ich das Problem nicht ganz: Warum verwendest Du denn nicht TFileStream? Da kannst Du doch sehr schön einstellen wer was wann mit der Datei machen darf... Und wenn die anderen Anwendungen auch von dir kommen, dann kannst Du doch ebenfalls darauf reagieren und nur mit einem Lese-Zugriff die Datei holen....

Grüße
  Mit Zitat antworten Zitat
Stefan H

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 10:51
Warum verwendest Du denn nicht TFileStream? Da kannst Du doch sehr schön einstellen wer was wann mit der Datei machen darf...
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.

Wenn ich die Aufgabenstellung korrekt verstehe, geht es ihm um eine Differenzierung der Zugriffsmöglichkeiten zwischen einzelnen Threads. Wobei der Sinn mal dahingestellt bleibt (das wäre so wie wenn man einem Treiber verordnete weniger Zugriffsmöglichkeiten zu haben als ein anderer Treiber, da alle in der TCB laufen, ist das aber unsinnig).
Also wie gesagt, erfahrungsgemäß wirst du ohne MFT-Zugriff nicht hinkommen und für diesen brauchste Adminrechte.
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 ich kann nicht glauben, dass es dafür keine Lösung gibt, weil Notepad mir die entsprechenden Dateien ohne irgendeine Meldung anzeigt.

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
  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 01:52 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