Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei öffnen die von anderen Programm verwendet wird (https://www.delphipraxis.net/100557-datei-oeffnen-die-von-anderen-programm-verwendet-wird.html)

Andreas L. 30. Sep 2007 14:15


Datei öffnen die von anderen Programm verwendet wird
 
Hi,
ich habe hier eine Ini-Datei die von einen anderen Programm verwendet wird. Wenn ich die Datei nun mit TMemIniFile öffnen will, bekomme ich die Meldung das die Datei derzeit genutzt wird. Öffne ich die Datei mit Notepad oder einen anderen Programm gehts. Wieso? Benötigt TMemIniFile denn exklusiven Zugriff oder woran liegts?

Apollonius 30. Sep 2007 14:24

Re: Datei öffnen die von anderen Programm verwendet wird
 
TMemIniFile verwendet TStrings.LoadFromFile, was mit fmShareDenyWrite arbeitet.

Andreas L. 30. Sep 2007 14:37

Re: Datei öffnen die von anderen Programm verwendet wird
 
Zitat:

Zitat von Apollonius
TMemIniFile verwendet TStrings.LoadFromFile, was mit fmShareDenyWrite arbeitet.

Und wie kann ich das Problem nun lösen?

Progman 30. Sep 2007 14:41

Re: Datei öffnen die von anderen Programm verwendet wird
 
statt TMemIniFile nur TIniFile verwenden?

Andreas L. 30. Sep 2007 14:43

Re: Datei öffnen die von anderen Programm verwendet wird
 
Zitat:

Zitat von Progman
statt TMemIniFile nur TIniFile verwenden?

Verwendet denn TIniFile denn nicht die selbe LoadFromFile-Routine? Außerdem kann ich dann große Ini-Dateien wieder nicht öffnen wegen den Größenbeschränkung oder gibts die in Delphi 2006 nicht mehr?

DeddyH 30. Sep 2007 14:52

Re: Datei öffnen die von anderen Programm verwendet wird
 
Über einen Umweg über TFileStream könnte es auch gehen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TFileStream;
    List: TStringList;
    Ini: TMemIniFile;
begin
  try
    Stream := TFileStream.Create('C:\boot.ini',fmOpenRead);
    List := TStringList.Create;
    Ini := TMemIniFile.Create('');
    try
      List.LoadFromStream(Stream);
      Ini.SetStrings(List);
      ShowMessage(Ini.ReadString('boot loader','timeout','nix'));
    finally
      FreeAndNil(Stream);
      FreeAndNil(List);
      FreeAndNil(Ini);
    end;
  except
    ShowMessage('Erzeugen von FileStream fehlgeschlagen');
  end;
end;

Progman 30. Sep 2007 14:54

Re: Datei öffnen die von anderen Programm verwendet wird
 
über Größenbeschränkung ist mir nichts bekannt, ich weiß nur, dass ich mit TIniFile eine Ini-Datei beliebig oft öffnen konnte, auch von unterschiedlichen Programmen aus. Kommt aber auch darauf an, auf welche Art andere Programme darauf zugreifen. Es gibt ja Programme, die ihre Ini- und Log-Dateien sperren.

marabu 30. Sep 2007 16:00

Re: Datei öffnen die von anderen Programm verwendet wird
 
Hallo Deddy,

du willst die Datei im compatibility mode öffnen? Das ist in der Praxis das Gleiche wie fmShareExclusive - besser so:

Delphi-Quellcode:
// ...
Stream := TFileStream.Create('C:\boot.ini', fmOpenRead or fmShareDenyNone);
// ...
Grüße vom marabu

DeddyH 30. Sep 2007 16:08

Re: Datei öffnen die von anderen Programm verwendet wird
 
Hallo marabu,

sorry, hast Recht ;)

Andreas L. 30. Sep 2007 17:15

Re: Datei öffnen die von anderen Programm verwendet wird
 
ich verwende jetzt die normale TIniFile-Klasse. Es kommt zwar keine Meldung, aber die Datei wird anscheinend nicht geladen.

Delphi-Quellcode:
 fIniFile := TIniFile.Create(FileName);
 Sections := TStringList.Create;
 fIniFile.ReadSections(Sections);
Meine StringList bleibt leer. Noch 'ne Idee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz