Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   locked textdatei oeffnen (https://www.delphipraxis.net/154307-locked-textdatei-oeffnen.html)

JnZn558 5. Sep 2010 17:46

Delphi-Version: 2009

locked textdatei oeffnen
 
hallo, wie kann ich eine textdatei, die gerade von andere editor bearbeitet wird oeffnen und den inhalt anschauen, moment kriege ich invalid file handle, muss man die text datei temporär kopieren und dann oeffnen, ist das der einziger weg??

XHelp 5. Sep 2010 18:15

AW: locked textdatei oeffnen
 
Vllt sowas wie
Code:
TfileStream.Create(filename,fmOpenRead + fmShareDenyNone);
?

Christian Seehase 5. Sep 2010 18:16

AW: locked textdatei oeffnen
 
Moin,

wenn Du die Datei nicht zum Lesen öffnen kannst, kannst Du sie auch nicht kopieren.
Wenn nun aber das Kopieren funktioniert, machst Du wahrscheinlich beim Öffnen der Datei etwas falsch, denn dann müsstest Du sie auch zum Lesen öffnen können.
Eventuell würde auch der Zugriff über einen Dienst funktionieren, wenn dieser mit LocalSystem gestartet wird.


@Alex:

Flags bitte nie addieren.

Das

fmOpenRead + fmShareDenyNone

kann zu ungültigen Werten führen.
Um Flags zu kombinieren immer OR verwenden.
(Ich weiss, dass in der Hilfe oft auch + zu lesen ist, dadurch wird's aber nicht besser ;-))

rollstuhlfahrer 5. Sep 2010 18:26

AW: locked textdatei oeffnen
 
Das ist doch gerade der Sinn daran, dass man eine zum lesen gesperrte Datei nicht lesen kann. Diese Technik kann man z.B. dazu nutzen um Klartextpasswörter im laufenden Betrieb eines Programmes dem User vor zu enthalten (ob das so sicher ist? - anderes Thema).
Also wenn die Datei gesperrt ist, dass ist sie gesperrt und kann auch nicht geöffnet werden, egal wie. Du müsstest also warten, bis das andere Programm die Datei nicht mehr sperrt und dann kannst du sie öffnen.

Bernhard

himitsu 5. Sep 2010 18:44

AW: locked textdatei oeffnen
 
@rollstuhlfahrer:
Es gibt Zugriffsrechte und Sharingrechte.

Man kann eine Datei zum Lesen, Schreiben und Lesen+Schreiben öffnen.
Und wenn man eine Datei öffnet, dann kann man (jenachdem, ob die entpsrechnde Funktion dieses ans System durchreicht) auch festlegen, wie/ob andere Programme wärendessen drauf zugreifen können/dürfen.

Wenn man also beim Öffnen erlaubt, daß andere Programme lesen dürfen, dann geht es dennoch.

PS: Wenn man eine geöffnete Datei zugreift und auch die entsprechenden Sharingrechte ferfügbar sind, dann muß man dennoch sleber beachten, daß die eigenen Sharingrechte nicht gegen den Zugriff des anderen Programms sprechen, sonst geht's dennoch nicht.

JnZn558 5. Sep 2010 19:49

AW: locked textdatei oeffnen
 
sollte man die textfile mit sharing rechte oeffnet und dann schliesse, haben dann auch die andere programme ein INVALID HANDLE?

im moment hab ich das mit filestream und fmOpenRead or fmShareDenyNone, wenn ich das programm starte bekommt ich kein ERROR, aber wenn es von fremden Programm aufgerufen wird, funktioniert zwar, aber dennoch bekomme ich am ende den EInOutError: I/O error 6 fehler, warum ist es denn so?

Aphton 5. Sep 2010 19:59

AW: locked textdatei oeffnen
 
Zitat:

Zitat von Christian Seehase (Beitrag 1047665)
@Alex:

Flags bitte nie addieren.

Das

fmOpenRead + fmShareDenyNone

kann zu ungültigen Werten führen.
Um Flags zu kombinieren immer OR verwenden.
(Ich weiss, dass in der Hilfe oft auch + zu lesen ist, dadurch wird's aber nicht besser ;-))

Erläuterung, wieso:

Code:
010010   2^4+2^1         16+2      18
101110   2^5+2^3+2^2+2^1      32+8+4+2   46
------ (Bitwise OR Operation)
111110   2^5+2^4+2^3+2^2+2^1   32+16+8+4+2   62
Schlussfolgerung
18 or 46 = 62
18 + 46 = 64

62 <> 64 (mathematisch eindeutig nachweisbar!!!)

MfG :P

JnZn558 5. Sep 2010 20:23

AW: locked textdatei oeffnen
 
Zitat:

Zitat von Aphton (Beitrag 1047681)
Zitat:

Zitat von Christian Seehase (Beitrag 1047665)
@Alex:

Flags bitte nie addieren.

Das

fmOpenRead + fmShareDenyNone

kann zu ungültigen Werten führen.
Um Flags zu kombinieren immer OR verwenden.
(Ich weiss, dass in der Hilfe oft auch + zu lesen ist, dadurch wird's aber nicht besser ;-))

Erläuterung, wieso:

Code:
010010   2^4+2^1         16+2      18
101110   2^5+2^3+2^2+2^1      32+8+4+2   46
------ (Bitwise OR Operation)
111110   2^5+2^4+2^3+2^2+2^1   32+16+8+4+2   62
Schlussfolgerung
18 or 46 = 62
18 + 46 = 64

62 <> 64 (mathematisch eindeutig nachweisbar!!!)

MfG :P

ja, danke, also ich hab sie nicht addiert, sondern mit or mit anders verknuepft, und ausserdem, ist bei mir der fall, direktes starten kein ERROR, starten durch aufruf von fremden programm ERROR 6 INVALID_HANDLE

Christian Seehase 5. Sep 2010 22:11

AW: locked textdatei oeffnen
 
Moin,

ich konnte dem Inhalt Deiner Worte jetzt nicht so ganz folgen, aber:
Wenn ein Programm eine Datei exklusiv öffnet, also jedweden Zugriff eines anderen Programmes nicht zulässt, spielt es keine Rolle, wie Du versuchst die Datei zu öffnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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