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
Seite 1 von 3  1 23      
Stefan H

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

Gelockte Datei trotzdem lesen

  Alt 16. Dez 2010, 22:31
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
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 00:07
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.
Miniaturansicht angehängter Grafiken
flexhex.png  
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 02:57
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 03:07
Was denn jetzt? Sperren oder nicht sperren?
Er will "cheaten". Das System veräppeln

Jetzt weiß ich wie du diese Menge Beiträge zusammenbekommen hast
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 03:16
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 04:42
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.
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
 
#7

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 07:35
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
Was denn jetzt? Sperren oder nicht sperren?
Er will "cheaten". Das System veräppeln
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?
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#8

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 07:48
(eigentlich eine Datenbank)
äähm, warum verwendest Du nicht eine solche? Genau für solche Fälle ist doch das Transaktionshandling von Datenbanken da!
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 07:57
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Stefan H

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

AW: Gelockte Datei trotzdem lesen

  Alt 17. Dez 2010, 08:32
@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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:10 Uhr.
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