![]() |
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? |
Re: Datei öffnen die von anderen Programm verwendet wird
TMemIniFile verwendet TStrings.LoadFromFile, was mit fmShareDenyWrite arbeitet.
|
Re: Datei öffnen die von anderen Programm verwendet wird
Zitat:
|
Re: Datei öffnen die von anderen Programm verwendet wird
statt TMemIniFile nur TIniFile verwenden?
|
Re: Datei öffnen die von anderen Programm verwendet wird
Zitat:
|
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; |
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.
|
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:
Grüße vom marabu
// ...
Stream := TFileStream.Create('C:\boot.ini', fmOpenRead or fmShareDenyNone); // ... |
Re: Datei öffnen die von anderen Programm verwendet wird
Hallo marabu,
sorry, hast Recht ;) |
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:
Meine StringList bleibt leer. Noch 'ne Idee?
fIniFile := TIniFile.Create(FileName);
Sections := TStringList.Create; fIniFile.ReadSections(Sections); |
Re: Datei öffnen die von anderen Programm verwendet wird
Ich hab' jetzt nochmal rumprobiert. In meiner StringList sind trotzdem die Sektionen drin. Trotzdem funktioniert mein Code nicht und ich habe keinen Plan wo der Wurm steckt:
Delphi-Quellcode:
constructor TWindowsSidebarNotes.Create(FileName: String = '');
var iGadget, iNotes: Integer; NewGadget: TWindowsSideBarNotesGadget; Sections: TStringList; begin inherited Create; fNotesGadgets := TObjectList.Create; if FileName = '' then Filename := IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_LOCAL_APPDATA)) + 'Microsoft\Windows Sidebar\Settings.ini'; fIniFile := TIniFile.Create(FileName); Sections := TStringList.Create; fIniFile.ReadSections(Sections); for iGadget := 0 to Sections.Count -1 do begin if fIniFile.ReadString('[' + Sections.Strings[iGadget] + ']', 'NoteCount', '') <> '' then begin NewGadget := TWindowsSidebarNotesGadget.Create; NewGadget.SectionName := Sections.Strings[iGadget]; for iNotes := 0 to StrToInt(StringReplace(fIniFile.ReadString('[' + Sections.Strings[iGadget] + ']', 'NoteCount', '0'), '"', '', [rfReplaceAll])) -1 do begin NewGadget.Add(fIniFile.ReadString('[' + Sections.Strings[iGadget] + ']', IntToStr(iNotes), '')); end; fNotesGadgets.Add(NewGadget); end; end; Sections.Free; end; //zum auslesen der einzelnen "Notizen" function TWindowsSidebarNotes.ReadNote(Gadget, Index: Integer):String; begin Result := (fNotesGadgets.Items[Gadget] as TWindowsSidebarNotesGadget).Strings[Index]; end; |
Re: Datei öffnen die von anderen Programm verwendet wird
IniFile.ReadString erfordert nur den String in Section, keine eckigen Klammern!
|
Re: Datei öffnen die von anderen Programm verwendet wird
Ich Idiot. Sollte mehr schlafen :nerd:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 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