Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei wird von einem anderen Prozess benutzt-trotzdem lesen? (https://www.delphipraxis.net/38576-datei-wird-von-einem-anderen-prozess-benutzt-trotzdem-lesen.html)

stefangeorg 21. Jan 2005 10:51


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

sakura 21. Jan 2005 10:59

Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
 
Versuche mal folgendes:
Delphi-Quellcode:
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;
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 :|

...:cat:...

gsh 21. Jan 2005 11:16

Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
 
Delphi-Quellcode:
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;
Du hast das var vergessen! Ohne des wird nämlich nichts mehr zurückgeben

Delphi-Quellcode:
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;
So müsste es doch auch gehen?
Weil dann könnte man gleich so schreiben:
Delphi-Quellcode:
slog.lines := LoadIntoStrings('C:\Path\log.log');
:zwinker:

//edit hab nur auf Delphi Tags geändert

sakura 21. Jan 2005 11:22

Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
 
Zitat:

Zitat von gsh
Du hast das var vergessen! Ohne des wird nämlich nichts mehr zurückgeben

Falsch, aStrings ist ein Objekt, welches man ändern kann. Var ist nicht nötig, teste es.

Zitat:

Zitat von gsh
So müsste es doch auch gehen?
Weil dann könnte man gleich so schreiben:

Nein, Du hast vergessen Deine Strings zu erstellen.

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:...

sakura 21. Jan 2005 11:24

Re: Datei wird von einem anderen Prozess benutzt-trotzdem le
 
Zitat:

Zitat von gsh
Weil dann könnte man gleich so schreiben:
Delphi-Quellcode:
slog.lines := LoadIntoStrings('C:\Path\log.log');

Da fällt mir auf, diese Zeile wäre auch inkorrekt, wenn dann:
Delphi-Quellcode:
slog := LoadIntoStrings('C:\Path\log.log');
Bei mir sähe der Aufruf so aus (weniger zu tippen):
Delphi-Quellcode:
LoadIntoStrings('C:\Path\log.log', SLog);
...:cat:...

stefangeorg 21. Jan 2005 12:03

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' ?

gsh 21. Jan 2005 12:06

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

gsh 21. Jan 2005 15:56

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 21:12 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