![]() |
Datei wird von einem anderen Prozess benutzt-trotzdem lesen?
Servus,
ich möchte eine Log-Datei, die ständig von einem anderen Programm aktualisiert wird mit Delphi auswerten und in einem kleinen Status-Fenster Informationen anzeigen lassen. In der Theorie klappt auch alles, nur ich habe per slLog.LoadFromFile keinen Zugriff auf die gewünschte Datei. Ich bekomme immer die Fehlermeldung "Cannot Open File, Prozess kann nicht auf die Datei zugreifen weil sie von einem anderen Prozess verwendet wird" Kann ich diese Sperre umgehen und die Log-Datei trotzdem mit anderen Methoden auslesen? mfg Georg Härting |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Versuche mal folgendes:
Delphi-Quellcode:
Der Unterschied zur Delphi-Variante ist, dass auf die Datei kein Schreibverbot gelegt wird, das kann unter Umständen allerdings zu einer unvollständigen Log-Information führen, ist also Abwägungssache. Wenn das nicht geht, dann hast Du aber auch keine reele Chance :|
procedure LoadIntoStrings(aFileName: String; aStrings: TStrings);
var FS: TFileStream; begin FS := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyNone); try aStrings.LoadFromStream(FS); finally FS.Free; end; end; ...:cat:... |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Delphi-Quellcode:
Du hast das var vergessen! Ohne des wird nämlich nichts mehr zurückgeben
procedure LoadIntoStrings(aFileName: String; var aStrings: TStrings);
var FS: TFileStream; begin FS := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyNone); try aStrings.LoadFromStream(FS); finally FS.Free; end; end;
Delphi-Quellcode:
So müsste es doch auch gehen?
function LoadIntoStrings(aFileName: String) : TStrings;
var FS: TFileStream; begin FS := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyNone); try result.LoadFromStream(FS); finally FS.Free; end; end; Weil dann könnte man gleich so schreiben:
Delphi-Quellcode:
:zwinker:
slog.lines := LoadIntoStrings('C:\Path\log.log');
//edit hab nur auf Delphi Tags geändert |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Zitat:
Zitat:
Ich muss Dich enttäuschen, aber in diesem Falle ist meine Variante die sauberere, da der Ersteller sich um die Erstellung und Zerstörung der StringListe kümmern musst. In Deinem Beispiel würde Deine Funktion die Liste erstellen und der aufrufende Code muss sich um die Freigabe kümmern - eine der Hauptquellen für Fehler von Speicherlecks. Ansonsten ist die Lösung natürlich machbar. ...:cat:... |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Zitat:
Delphi-Quellcode:
Bei mir sähe der Aufruf so aus (weniger zu tippen):
slog := LoadIntoStrings('C:\Path\log.log');
Delphi-Quellcode:
...:cat:...
LoadIntoStrings('C:\Path\log.log', SLog);
|
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Servus,
ging ja fix :-D . Jetzt funktionert es. Danke!!! mfg Georg Härting PS: wie markiere ich die Frage jetzt als 'beantwortet' ? |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
OK du hast mich überzeugt.
Die Fehler hät ich dann spätestens im delphi gemerkt aber ich hab des alles so aus dem stehgreif aufgeschrieben |
Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
Was willst du bitte als beantwortet markieren? :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 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