AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

meminifiles, inifiles , einlesen scheitert

Ein Thema von bernhard_LA · begonnen am 21. Okt 2021 · letzter Beitrag vom 22. Okt 2021
Antwort Antwort
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
497 Beiträge
 
Delphi 12 Athens
 
#1

AW: meminifiles, inifiles , einlesen scheitert

  Alt 21. Okt 2021, 15:38
Bis zu einer bestimmten Version wurde beim Einlesen abgebrochen, wenn in der Datei /Stream ein #0 vorkommt.
In XE7 ist das so und bei 10.4 nicht mehr.
Erkennbar ist das in der System.Classes in der Methode
Delphi-Quellcode:
procedure TStrings.SetTextStr
...
while P^ <> #0 do
...
Ich würde da mal einen Haltepunkt setzen oder mit dem Hex-Editor (HxD) nach #0 suchen.

Geändert von BerndS (21. Okt 2021 um 15:52 Uhr) Grund: HxD hinzugefügt
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.141 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 10:07
das Problem liegt vlt. doch nicht an den Files ....
ich habe eine Mini-Testprogramm geschrieben , in diesem Falle klappt das einlesen der Sections, welches in der echten Anwendung fehlschlägt



Delphi-Quellcode:
procedure TForm2.ReadPointlist3Dfile(filename: string);
var
  AptList: TPointList3DAlign;
begin
  AptList := TPointList3DAlign.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 3D', Memo3);
end;

procedure TForm2.ReadPointlistfile(filename: string);
var
  AptList: TPointlist;
begin
  AptList := TPointlist.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 2D ', Memo3);

  AptList.SavetoFile(filename);
end;

procedure TForm2.ReadInifile(filename: string);
var
  aini: TInifile;
  Sections: TStringlist;
begin
  aini := TInifile.Create(filename);

  Sections := TStringlist.Create;

  aini.ReadSections(Sections);

  Memo2.Lines.AddStrings(Sections);

  aini.Free;

  Sections.Free;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute() then
  begin
    Memo1.Lines.LoadfromFile(OpenDialog1.filename);

    ReadInifile(OpenDialog1.filename);

    ReadPointlistfile(OpenDialog1.filename);

    ReadPointlist3Dfile(OpenDialog1.filename);
  end;
end;

end.

Das nun existierende Problem, die eigentliche Anwendung führt auch nur diese 3 Schritte aus (und natürlich viele anderr ...) schlägt weiterhin fehl.

Delphi-Quellcode:
  
  AptList := TPointList3DAlign.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 3D', Memo3);
im Debugging zeigt sich , daß bei AptList.LoadfromFile(filename); keine Sections gefunden werden .....

Geändert von bernhard_LA (22. Okt 2021 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.688 Beiträge
 
Delphi 12 Athens
 
#3

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 10:35
Vielleicht ist die Datei noch von einer anderen Anwendung gesperrt oder sowas in der Art.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#4

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 11:46
Da hier sämtliche Ressourcenschutzblöche fehlen, kann er es auch selber sein.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.141 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 16:36
@himitsu
Zitat:
sämtliche Ressourcenschutzblöche fehlen, kann er es auch selber sein.
was wäre denn hier zu tun ?
eine andere *.ini Datei, im anderen Ordner mit der selben Delphi Anwendung geschieben funktioniert perfekt
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.141 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 17:18
PS: problem gelöst, im der eigentlichen Anwendung wurde der "nur fast" richtige Filename übergeben,super peinlich

schade , daß ich keine exception bekomme wenn ich aus einer ini Datei lesen, die nicht existiert,

dann wäre der Bug viel früher aufgefallen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#7

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 17:27
Delphi-Quellcode:
procedure TForm2.ReadPointlist3Dfile(filename: string);
var
  AptList: TPointList3DAlign;
begin
  if not FileExists(filename) then begin
    MessageDlg(Format('Datei %s wurde nicht gefunden.',[ExtractFileName(Filename)]),mtError,[mbOk],0);
    exit;
  end;
  AptList := TPointList3DAlign.Create;
  try
    AptList.LoadfromFile(filename);
    CopyPointList2Memo(AptList, 'debug 3D', Memo3);
  finally
    AptList.Free; // oder muss AptList nicht freigegben werden???
  end;
end;
Delphi-Quellcode:
procedure TForm2.ReadInifile(filename: string);
var
  aini: TInifile;
  Sections: TStringlist;
begin
  if not FileExists(filename) then begin
    MessageDlg(Format('Datei %s wurde nicht gefunden.',[ExtractFileName(Filename)]),mtError,[mbOk],0);
    exit;
  end;
  aini := TInifile.Create(filename);
  try
    Sections := TStringlist.Create;
    try
      aini.ReadSections(Sections);
      Memo2.Lines.AddStrings(Sections);
    finally
      Sections.Free; // Damit die Freigabe auch bei Fehlern erfolgt.
    end;
  finally
    aini.Free; // Damit die Freigabe auch bei Fehlern erfolgt.
  end;
end;
Wenn in der ursprünglichen Routine einmal ein Fehler auftritt, bleibt (schlimmstenfalls) der Zugriff auf die Datei "Filename" bestehen und wenn Du Pech hast, ist die Datei (dauerhaft) blockiert. (Kommt halt auf die jeweils verwendeten Zugriffsrechte auf Dateiebene an.)

Wenn
Zitat:
eine andere *.ini Datei, im anderen Ordner mit der selben Delphi Anwendung geschieben funktioniert perfekt
, heißt das nicht, dass man auf jegliche Fehlerbehandlung und die gesicherte Freigabe von Objekten, ... verzichten kann.

Fehlerbehandlung und Ressourcenschutzblöcke sind halt nicht für den funktionierenden Normalfall, sondern für die Ausnahmen-/Fehlerbehandlung erforderlich, damit eben auch dann "normal" weitergearbeitet werden kann und nicht "irgendwie, irgendwo, irgendwann" nicht nachvollziehbare "Spätfolgen" auftreten.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: meminifiles, inifiles , einlesen scheitert

  Alt 22. Okt 2021, 17:35
Zitat:
PS: problem gelöst, im der eigentlichen Anwendung wurde der "nur fast" richtige Filename übergeben,super peinlich
Fehler wäre nie aufgetreten wenn die Dateinamen bekannt und immer gleich sind diese als Konstante definiert gewesen wären.
Man vertippt sich doch sehr leicht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 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