Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Logdatei kann lokal nicht auf Server gelesen werden (https://www.delphipraxis.net/163226-logdatei-kann-lokal-nicht-auf-server-gelesen-werden.html)

fuchsle 20. Sep 2011 13:42

Logdatei kann lokal nicht auf Server gelesen werden
 
Hallo zusammen,

mir wurde zum testen eine Logdatei bereit gestellt, ich habe schon an mir gezweifelt bis ich die Datei lokal kopiert hatte.
Wenn ich die Datei nun lokal auf dem Rechner habe, so kann ich wunderbar darauf zugreifen.
Wenn ich jedoch auf die Datei auf dem Server zugreifen möchte, so bekomme ich eine Fehlermeldung "E/A-Fehler 104".
Der Fehler tritt in der Zeile von " while not eof(f) do" auf.
Die Datei wird alle 60s aktualisiert.

Hier die Routine mit der ich auf die Datei zugreife:

Delphi-Quellcode:
function ThreadValue.ReadLogFile(Value: Integer): Double;
var
  f: TextFile;
  s: String;
  i: Integer;
  d: Double;
begin
//  AssignFile(f, 'c:\temp\xxx.LOG');
  AssignFile(f, '\\...\xxx.LOG');
// Fehlermeldungen ausschalten:
{$I-}
  Reset(f);
{$I+}
  i := 0;
  DecimalSeparator := '.';
  while not eof(f) do
  begin
    Readln(f, s);
    d := StrToFloat(s);
    case i of
    0, 1, 2:
      begin
        d := d / 100;
      end;
    end;
    if Value = i then
    begin
    Result := d;
    end;
    Inc(i);
  end;
  CloseFile(f)
end;
Hier der Inhalt der Logdatei:
1352.64
509.78
806.19
18.03

Vielen Dank für eure Hilfe!

DeddyH 20. Sep 2011 13:49

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Wenn Du schon {$I-} benutzt, dann solltest Du auch IOResult auswerten.

s.h.a.r.k 20. Sep 2011 13:57

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Ich kenne den Fehlercode nicht auswendig, aber wenn zwei Programme gleichzeitig auf eine Datei zugreifen, kracht es mit hoher Wahrscheinlichkeit mal. Und genau das ist eben bei dir der Fall. Daher unbedingt das IOResult abfragen und schauen, ob du überhaupt Zugriff auf die Datei hast. Zudem ists immer gut, wenn du nach einem erfolgreichen Reset die Datei auch wieder zu machst -> try-finally-Block.

Luckie 20. Sep 2011 13:58

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Weitere Fehlerquelle ist die relative Pfadangabe oder hast du sie nur hier gekürzt?

Klaus01 20. Sep 2011 14:02

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
..
104 nicht zum Lesen geöffnet - die Datei sollte dann schon gefunden worden sein,
sonst wäre wohl eine andere Fehlernummer aufgetreten.

Grüße
Klaus

fuchsle 20. Sep 2011 14:05

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Zitat:

Zitat von Luckie (Beitrag 1125528)
Weitere Fehlerquelle ist die relative Pfadangabe oder hast du sie nur hier gekürzt?

Ist nur hier gekürzt.

Mit einem normalen Editor (TextPad) kann ich die Datei ohne Probleme öffnen und es wird mir gemeldet wenn sich was in der Datei geändert hat.
Mir war klar, dass es Probleme geben kann wenn ein anderes Programm immer wieder in die Datei schreibt.

Wie kann ich manuel prüfen ob die Datei "frei" gegeben ist?

Klaus01 20. Sep 2011 14:08

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
.. meines Wissens versucht reset(f) die Datei exclusive zu öffnen.
Eventuell kann man da noch etwas am FileMode drehen.
Oder aber TFileStream nutzen und die Optionen beim Öffnen der Datei mitgeben.

Grüße
Klaus

Union 20. Sep 2011 15:02

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Und dann immer schön auf den Benutzerkontext des Service achten, gell ;)

fuchsle 21. Sep 2011 10:02

AW: Logdatei kann lokal nicht auf Server gelesen werden
 
Problem gelöst:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TStream;
  Stringlist: TStringList;
  Filename: string;
begin
  Filename := '\\...\xxx.LOG'; // Pfad nur im Beispiel gekürzt
  Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  try
    Memo1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


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