![]() |
Zugriff auf eine extern geöffnete Datei nicht möglich ?
Hallo,
ich muss auf die Protokollausgaben eines externen Programmes reagieren. Das Programm erzeugt zur Laufzeit eine Protokolldatei. Ich starte dieses Programm und möchte gerne über einen Timer alle zwei Sekunden das Protokoll einlesen und auswerten. Dazu nutze ich folgenden Code
Delphi-Quellcode:
Nun öffnet mir der Code die Datei erst wenn sich mein externes Programm geschlossen hat.
var bLoadFile : boolean;
fMyProtFile : textfile; sLineValue : string; ... bLoadFile := true; LB_Protokoll.Items.clear; try AssignFile(fMyProtFile, sExportPfad + sLogFileName); // Datei ausgewählt Reset(fMyProtFile); while not EOF(fMyProtFile) do begin Readln(fMyProtFile, sLineValue); // Erste Zeile der Datei lesen } LB_Protokoll.Items.add(sLineValue); end; CloseFile(fMyProtFile); except bLoadFile := false; end; if (bLoadFile = true) then begin ... Wenn ich zur Laufzeit die Datei mit einem Betrachter ansehe, klappt das problemlos. Kann ich irgendwie anders auf die Datei zugreifen? Gruß Holger. :gruebel: |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Deine ganze vorgehensweise ist VIEL zu umständlich.
Folgendes ist ausreichend:
Delphi-Quellcode:
Es könnte nun sein, dass die Log-Datei noch geschrieben wird, während du die Datei einlesen möchtest.
LB_Protokoll.Items.LoadFromFile(sExportPfad + sLogFileName);
Dann muss man folgendes tun:
Delphi-Quellcode:
procedure LoadFromFile2(s: TStrings; const FileName: string);
var Stream: TStream; begin // durch das auskommentieren des Flags fmShareDenyWrite dürfen // anderere Prozesse gleichzeitig schreiben Stream := TFileStream.Create(FileName, fmOpenRead {or fmShareDenyWrite}); try s.LoadFromStream(Stream); finally Stream.Free; end; end; ... LoadFromFile2(LB_Protokoll.Items, sExportPfad + sLogFileName); |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Danke,
ich habe vorher "LoadFromFile" verwendet, bin aber als es nicht geklappt hat, auf die zeilenweise Lösung gegangen. Gruß Holger. |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Hallo,
schau dir mal FileMode an, standardmässig wird die Datei readwrite geöffnet. Heiko |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Zitat:
Die Funktionen AssignFile, rewrite, readln, ... stammen noch aus der Pascal Steinzeit und sollten überhaupt nicht mehr verwendet werden. Aber man kann das alte Denken wohl nicht ausrotten. :-( |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Hallo,
ich habe die Lösung von Smia umgesetzt. Sie bringt mir leider keinen Erfolg. Jetzt kommte die selbe Meldung die ich vorher auch mit "LoadFromFile" hatte. Meldung "Datei kann nicht geöffnet werden". Gibt es noch andere Möglichkeiten eine geöffnete Datei auszulesen? Gruß Holger. :gruebel: |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Ja gibt es (solange die Datei mit ausreichend Sharingrechten geöffnet wurde) ... dein Betrachter kann es ja auch :zwinker:
Du mußt nur selber beachten, daß du selber auf die nötigen Rechte achtest. :warn: Da die Datei von dem anderem Programm bereits mit Schreibrechten geöffnet und vermutlich auch das Schreiben für andere Programme verboten wurde, solltest du nur Lesend (mit Lese- und keinem Schreibzugriff) und am Besten allen Sharingrechten an die Datei rangehen. Für die WinAPIs wären es diese Rechte: > Access: GENERIC_READ > Share: FILE_SHARE_WRITE or FILE_SHARE_READ Allerdings regeln das viele Delphifunktionen intern etwas anders, z.B. gehen einige einen Umweg über die globale Variable FileMode (siehe OH). |
Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?
Hallo,
danke für die Hilfe. Nur kann ich mit Zitat:
Wie bekomme ich denn über API Funktionen den Text in meine Listbox? Gruß Holger. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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