AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriff auf eine extern geöffnete Datei nicht möglich ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf eine extern geöffnete Datei nicht möglich ?

Ein Thema von little_budda · begonnen am 30. Jan 2007 · letzter Beitrag vom 31. Jan 2007
Antwort Antwort
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#1

Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 30. Jan 2007, 14:35
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:
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

...
Nun öffnet mir der Code die Datei erst wenn sich mein externes Programm geschlossen hat.
Wenn ich zur Laufzeit die Datei mit einem Betrachter ansehe, klappt das problemlos.

Kann ich irgendwie anders auf die Datei zugreifen?

Gruß Holger.

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 30. Jan 2007, 14:48
Deine ganze vorgehensweise ist VIEL zu umständlich.
Folgendes ist ausreichend:
LB_Protokoll.Items.LoadFromFile(sExportPfad + sLogFileName); Es könnte nun sein, dass die Log-Datei noch geschrieben wird, während du die Datei einlesen möchtest.
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);
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 30. Jan 2007, 15:04
Danke,

ich habe vorher "LoadFromFile" verwendet,
bin aber als es nicht geklappt hat, auf die zeilenweise Lösung gegangen.

Gruß Holger.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 30. Jan 2007, 15:09
Hallo,

schau dir mal FileMode an,
standardmässig wird die Datei readwrite geöffnet.


Heiko
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 30. Jan 2007, 15:23
Zitat von little_budda:
ich habe vorher "LoadFromFile" verwendet,
bin aber als es nicht geklappt hat, auf die zeilenweise Lösung gegangen.
Ich hab dir ja jetzt eine saubere, moderne Lösung mit TStream gezeigt.
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 31. Jan 2007, 06:50
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.

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 31. Jan 2007, 12:21
Ja gibt es (solange die Datei mit ausreichend Sharingrechten geöffnet wurde) ... dein Betrachter kann es ja auch


Du mußt nur selber beachten, daß du selber auf die nötigen Rechte achtest.

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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Zugriff auf eine extern geöffnete Datei nicht möglich ?

  Alt 31. Jan 2007, 12:42
Hallo,

danke für die Hilfe.
Nur kann ich mit
Zitat:
Für die WinAPIs wären es diese Rechte:
> Access: GENERIC_READ
> Share: FILE_SHARE_WRITE or FILE_SHARE_READ
leider so gar nichts anfangen.

Wie bekomme ich denn über API Funktionen den Text in meine Listbox?

Gruß Holger.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  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 18:37 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