Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Von anderer Anwendung geöffnete Datei lesen (https://www.delphipraxis.net/151652-von-anderer-anwendung-geoeffnete-datei-lesen.html)

Tron4U 26. Mai 2010 19:44


Von anderer Anwendung geöffnete Datei lesen
 
Hi,

Ich möchte eine Datei lesen, die von einer anderen Anwendung bereits geöffnet ist.
Geht das überhaupt und wenn ja wie?

Ich möchte mir einen Monitor für den Apache-Server schreiben, der u.A. auch die Logdateien auswerten soll.
Diese sind aber ständig geöffnet, ein Lesezugriff endet immer mit einer Fehlermeldung.

Weiss Jemand Rat?

himitsu 26. Mai 2010 20:42

Re: Von anderer Anwendung geöffnete Datei lesen
 
Wie wäre es mit der Forensuche?

Sowas wird öfters mal gefragt. :zwinker:
http://www.delphipraxis.net/internal...t.php?t=177742

Tron4U 27. Mai 2010 14:18

Re: Von anderer Anwendung geöffnete Datei lesen
 
Dankeeee der Link hat mir geholfen :)

Tron4U 27. Mai 2010 17:25

Re: Von anderer Anwendung geöffnete Datei lesen
 
hallo nochmal,

das listing in dem artikel zudem der link führt
funktioniert bei mir leider nich. ich benutze delphi 7
und bekomme bei der zeile

Zitat:

DecodeHeaderfromFile(FFileText);
die fehlermeldung: undefinierter bezeichner
vom compiler

hier nochmal das komplette listing

Delphi-Quellcode:
procedure TLTC2440_DataList.LoadData(AFileName: String);
var AHStream : THandleStream;
    AFileHandle : THandle;
begin
  FFileName := AFileName;
  Clear;
  AFileHandle := CreateFile(PChar(AFileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
    0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if AFileHandle <> INVALID_HANDLE_VALUE then begin
    FFileText := TStringList.Create;
    try
        AHStream := THandleStream.Create(AFileHandle);
        try
          FFileText.LoadFromStream(AHStream);
        finally
          FreeAndNil(AHStream);
        end;
      finally
        CloseHandle(AFileHandle);
      end;
      DecodeHeaderfromFile(FFileText);
      DecodeValues(FFileText);
    finally
      FreeAndNil(FFileText);
    end;
  end;
end;

ratloser Klaus :)

himitsu 27. Mai 2010 17:39

Re: Von anderer Anwendung geöffnete Datei lesen
 
Dieses ist ja auch ein spezieller Code für okis Programm
und die erwähnte Funktion gehört zu dessen Programm.

Der für dich interessante Teil ist das CreateFile + der Stream (oder was man sonst für den Zugriff auf dieses Handle verwenden will)

Delphi-Quellcode:
procedure LoadData(const FileName: String);
var Stream : THandleStream;
    FileHandle : THandle;
begin
  FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
    0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if AFileHandle <> INVALID_HANDLE_VALUE then begin
    try
      Stream := THandleStream.Create(FileHandle);
      try

        // mach irgendwas mit dem "Stream"

      finally
        FreeAndNil(Stream);
      end;
    finally
      CloseHandle(FileHandle);
    end;
  end else
    ShowMessage(SysErrorMessage(GetLastError));
end;

Tron4U 28. Mai 2010 13:15

Re: Von anderer Anwendung geöffnete Datei lesen
 
hi,

danke, ich hab noch nie was mit streams gemacht, aber ich werde mich mal dransetzen.

Klaus

himitsu 28. Mai 2010 13:40

Re: Von anderer Anwendung geöffnete Datei lesen
 
Du kannst auch einfach LoadFromStream z.B. von einer TStringList verwenden.
Wie wolltest du denn vorher die Datei öffnen? (also da wo dir die Fehlermeldung auffiehl)


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