AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Exception beim Createn eines IniFiles
Thema durchsuchen
Ansicht
Themen-Optionen

Exception beim Createn eines IniFiles

Ein Thema von fortuneNext · begonnen am 22. Aug 2008 · letzter Beitrag vom 24. Aug 2008
Antwort Antwort
Seite 1 von 3  1 23      
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#1

Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 22:10
Hi,
sorry dass ich schonwieder Frage (ich fühl mich schon ganz schlecht hier immer so dumme Fragen zu stellen ) aber ich such den Fehler in diesem Programm seid mehreren Stunden (und hab auch schon 10 Minuten nachgedacht ) aber ich finds einfach nicht.
Alle relevanten Sachen:

Delphi-Quellcode:
uses
   IniFiles, SysUtils, Classes, Dialogs;

type
   TBasicControl = class(TObject)
   private
   {}
   public
   procedure ReadAllIn;
   end;
   TLanguageFile = class(TIniFile)
   private
   {}
   public
   {}
   end;

var
  LanguageFiles: Array of TLanguageFile;
  BasicControl: TBasicControl;

procedure TBasicControl.ReadAllIn;
var
  SR: TSearchRec;
  x: integer;
begin
  x := 0;
  if FindFirst(ExtractFilePath(ParamStr(0)) + 'Language\*.ini', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        x := x + 1;
        SetLength(LanguageFiles, x + 1);
        LanguageFiles[x].Create(ExtractFilePath(ParamStr(0)) + 'Language\' + sr.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

Die Exception tritt beim Createn auf. Der Pfad wird richtig ausgegeben, das habe ich schon überprüft. Zum prüfen habe ich eine Test.ini benutzt.
Ich weiss nicht woher der Fehler kommt...
Im Prinzip sollen einfach alle .ini Dateien im Ordner (Pfad)/Languages im dynamischen Array gespeichert werden.
All dies befindet sich auf einer Unit ohne Form.
Danke!

mfg
fortuneNext
Woher könnte sie kommen?
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 22:17
Hi,

so kannst Du das nicht createn

        LanguageFiles[x].Create(ExtractFilePath(ParamStr(0)) + 'Language\' + sr.Name); mach mal lieber so

        LanguageFiles[x] := tLanguageFile.Create(ExtractFilePath(ParamStr(0)) + 'Language\' + sr.Name); Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 22:17
Hi,

LanguageFilex[x] := TLanguageFile.Create(...) Es gibt mehrere Arten, einen Konstruktor aufzurufen. Du hast die falsche genommen (so arbeitet er wie eine normale Methode auf einem schon existierenden Objekt, aber du willst es erst noch rzeugen, daher musst du es so sches so machen, wie ich es geschrieben habe.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 22:20
Ojaaaa... danke! Warum mache ich eigentlich immer wieder diesen verdammten Fehler? Ich sollte mir mal ein Programm schreiben, das bei jeder Exception erstmal ne Message zeigt die mich an diesen Fehler erinnert
danke sehr!
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 22:24
Hallo.

[Antwort kommt leider wegen temp. Netzwerkproblem zu spät. Ich poste trotzdem meinen Entwurf:]

Delphi-Quellcode:
        x := x + 1;
        SetLength(LanguageFiles, x + 1);
        LanguageFiles[x].Create(ExtractFilePath(ParamStr(0)) + 'Language\' + sr.Name);
Dein Array müsste bei Index=1 anfangen und dann immer um 1 erweitert werden. Und was ist mit dem nullten (0.) Element? Initialisiere doch mal x mit x := -1;

(Anmerkung: Verwende doch inc(x) statt x := x+1, sieht schöner aus)

Außerdem wäre hier sinnvoll, zu wissen wie dein TLanguageFile funktioniert. Wie ist der Code von Create()?

Teste bitte auch deinen Code genau, in dem du per F7 Schrittweiße den Code so lange ausführst und kontrollierst, bis die Exception erscheint. Dann weißt du schonmal die exakte Zeile, in der der Fehler auftritt. (Bitte Code posten und ein "// EXCEPTION" dahinter).

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 23:07
Die Frage ist zwar schon geklärt, aber ich antworte trotzdem nochmal auf Daniels Post
1. Ich habe mir angewöhnt, Eintrag 0 eines Arrays immer leer zu lassen bzw. für irgendwelche Sonderoptionen offen zu lassen, und die eigentliche Zählung erst beim 1. Element beginnen zu lassen. In 0 schreibe ich dann z.B. öfters mal die Gesamtzahl der Elemente, das fand ich immer sehr praktisch
2. Inc(x) -> das kannt ich noch nicht, danke ;D
3. Den TLanguageFile hatte ich gepostet - ist quasi ein normales IniFile mit einer Zusatzfunktion. Das habe ich allerdings gerade auch geändert, sodass die LanguageFile Variablen TIniFiles sind.
4. Mit F7 arbeite ich IMMER sehr nützlich. Ich hatte auch geschrieben wo genau die Exception auftritt, aber gut, ich kanns auch kommentieren Da ich grad aber schonwieder eine Exception habe probier ichs doch gleich mal aus... diesmal habe ich nicht den gleichen Fehler gemacht (hoffe ich)

UNIT 1: mLeer (eine leere Testform enthalten)
Relevante Teile:
Delphi-Quellcode:
procedure TfTest.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  BasicControl.OpenFile('test');
  fTest.Caption := BasicControl.ReadEntry('fTestCaption'); //Exception
end;
UNIT 2: mBase (keine Form und auch sonst nichts)
Relevante Teile (hauptsächlich die function TBasicControl.ReadEntry, ich habe aber auch mal die Erstellung gepostet, man kann ja nie wissen):
Delphi-Quellcode:
uses
   IniFiles, SysUtils, Classes, Dialogs;

type
   TBasicControl = class(TObject)
   private
   {}
   public
   procedure OpenFile(LanguageName: string);
   procedure FreeIni;
   function ReadEntry(Entry:string):string;
   end;

var
  LanguageFiles: Array of TIniFile;
  UsedLanguageFile: TIniFile;
  UsedLanguageFilePath: String;
  BasicControl: TBasicControl;

procedure TBasicControl.OpenFile(LanguageName: string);
var
  SR: TSearchRec;
  x: integer;
begin
  x := 0;
  if FindFirst(ExtractFilePath(ParamStr(0)) + 'Language\*.ini', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        x := x + 1;
        SetLength(LanguageFiles, x + 1);
        LanguageFiles[x] := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Language\' + sr.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  x := 0;
  for x := 1 to high(LanguageFiles) do
  begin
    if ExtractFileName(LanguageFiles[x].FileName) = LanguageName + '.inithen
    begin
      UsedLanguageFile := LanguageFiles[x];
      UsedLanguageFilePath := UsedLanguageFile.FileName;
    end;
    LanguageFiles[x].Free;
  end;
end;

function TGBasicControl.ReadEntry(Entry:string):String;
begin
  Result := UsedLanguageFile.ReadString('words', Entry, 'missing'); //Exception
end;

end.

Wie man sieht, muss ich noch viel üben... ich mache wohl einfach noch zu viele dumme Anfängerfehler, die eigentlich völlig unnötig sind, und auf die ich dann auch einfach nicht komme...
Naja. Da man in der Schule leider nichts vernünftiges lernt, ist man als Wissensquelle eben auf Tutorials, Denken und Forenhilfe angewiesen
Ich finde die Hilfe hier richtig gut muss ich sagen. Schnell, gut erklärt und kein "man bist du dumm!!!". Da versteht mans direkt und machts (meistens) nächstes Mal besser.
mfg
fortuneNext
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 23:16
Delphi-Quellcode:
function TGBasicControl.ReadEntry(Entry:string):String;
begin
  Result := UsedLanguageFile.ReadString('words', Entry, 'missing'); //Exception
end;
Hallo.

Um Ressourcen zu sparen, würde ich UsedLanguageFile nicht als TIniFile machen, sondern als Integer! Ich würde also

Result := LanguageFiles[UsedLanguageFile].ReadString(...); verwenden. Dies verhindert auch, dass UsedLanguageFile und LanguageFiles[4] sich gegenseitig blockieren. Vielleicht ist hier schon der Grund zu suchen. Du hättest das INI-File 2 Mal geöffnet, einmal als LanguageFiles[4] und einmal als UsedLanguageFile.

Ansonsten würde ich bei ReadEntry() noch prüfen, ob überhaupt eine Sprachdatei geöffnet ist. (Vielleicht mit deinem 0ten Eintrag?)

Delphi-Quellcode:
function TGBasicControl.ReadEntry(Entry:string):String;
begin
  if UsedLanguageFile <> 0 then
  begin
    Result := LanguageFiles[UsedLanguageFile].ReadString('words', Entry, 'missing');
  end
  else
  begin
    // Keine Sprachdatei öffen
    result := ':-/';
  end;
end;
Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#8

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 23:18
sag mal, welche exception kommt denn?

und bist dir sicher, dass deine instanz (auf tInifile) zum aufruf bereits existiert...
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 23:21
Zitat von grenzgaenger:
und bist dir sicher, dass deine instanz (auf tInifile) zum aufruf bereits existiert...
Wollte ich auch sagen. Wenn nichts funktioniert, solltest du mit Assign() nachprüfen, ob das die tIniFile existiert. Wenn du aber

1. mit UsedLanguageFile = Integer arbeitest
2. die Sprachpakete direkt beim Programmstart geladen werden

sollte LanguageFiles[UsedLanguageFile] immer Assign'ed sein.
Daniel Marschall
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Exception beim Createn eines IniFiles

  Alt 22. Aug 2008, 23:27
> Naja, ich hatte das Used Ding eigentlich eben wegen der Ressourcen eingesetzt; je nachdem, wieviele Files da später sind, würde sich das ja nicht rentieren, die alle offen zu halten. Daher werden sie ja nach Erstellen des UsedLanguageFile schonwieder ge .free d, während das UsedlanguageFile offen bleibt. Lieber 1 offene Datei als ein unbegrenzt großer DynArray, oder? Da kann wohl auch nicht der Fehler liegen, da die DynArray Files ja eben schon zu sind...
> Das mit der Überprüfung ist allerdings ein guter Vorschlag Da hatte ich garnicht dran gedacht kann ja immer mal was sein... einfach DAU-fest machen

> Es kommt die übliche EAccessViolation!
> Naja, ich habe ja geschrieben wie der Ablauf ist! OpenFile ist gleich das erste was passiert, dort wird alles erstellt, geladen etc.. Danach kommt (unit mLeer) dann der Aufruf der function.

Tante Edith sagt:
> Mir ist aber gerade aufgefallen, ich könnte auch statt der Extra-Variable UsedLanguageFile einfach LanguageFiles[0] nehmen ^^ wieder eine Variable gespart :-]
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:42 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