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/)
-   -   AssignFile -> simples prinzip aber ich stolper trotzdem... (https://www.delphipraxis.net/160165-assignfile-simples-prinzip-aber-ich-stolper-trotzdem.html)

DerTobi 30. Apr 2011 11:38

Delphi-Version: 2010

AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Hallo zusammen,

mir ist es schon fast peinlich das Problem zu schildern, da a.)es mein erster Post ist und b.) AssignFile eigentlich simpel genug sein sollte.

Bei folgendem Abschnitt schmeisst er mir eine Exception sobald das AssignFile aufgerufen wird. FLogFile ist dabei vom Typ TextFile. Der Pfad der in xLogFile steht ist auch vorhanden. Das ganze auf Windows 7. Sehe ich den Wald vor lauter Bäumen nicht? Vielen Dank schoneinmal fürs Lesen und evtl. wenn jemand eine Lösung hat, dann auch für eben jene :)

Delphi-Quellcode:
constructor TFileLogObject.Create;
var xLogFile: String;
begin
  inherited Create;

  xLogFile := GetCurrentDir + '\' + gcLogFileDir + FormatDateTime('yyyy-mm-dd', now) + gcLogFileExtension;
  AssignFile(FLogFile, xLogFile);

  if not FileExists(xLogFile) then
    Rewrite(FLogFile)
  else
    Append(FLogFile);
end;

himitsu 30. Apr 2011 11:45

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
In AssignFile passiert eigentlich noch garnichts mit der Datei.
Dort wird nur der Dateiname gespeichert (welcher dann bei Append/Rewrite gnutzt wird) und die Dateivariable initialisiert, so daß es dort eigentlich fast nie zu einer Exception kommen kann (außer, wenn mit der Dateivariable etwas nicht stimmt).

Wie/Wo ist FLogFile deklariert
und wie wird deine Klasse erstellt?

Und bist du sicher, daß die Exception bei AssignFile und nicht schon bei
Delphi-Quellcode:
xLogFile := ...
oder im
Delphi-Quellcode:
inherited Create;
auftritt?

Luckie 30. Apr 2011 11:45

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Das wichtigste hast du vergessen. Was für eine Exception bekommst du?

DerTobi 30. Apr 2011 12:00

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Hossa das ging fix :)

Oh peinlich, wird sofort nachgereicht. Exception ist eine EAccessViolation. Eigentlich ein klarer Indikator aber mir wills einfach nicht aufgehen.

Deklaration sieht wie folgt aus:

Delphi-Quellcode:
  TFileLogObject = Class(TObject)
  private
    FLogFile: TextFile;
    function FormatTimeStampForLog: String;
  public
    constructor Create;overload;
    destructor Destroy;override;

    procedure AddLogEntry(aMessage: String);
  end;
Der Einzelschritt sagt mir es knallt beim AssignFile. Mich wundert es ja auch das es da knallt. Es wird ja nur der Handle erzeugt. Wenn der Handle ins nichts zeigt beim aufruf Ok aber so? Wie gesagt, ich übersehe bestimmt wieder mal eine popelige Kleinigkeit.

Das TFileLogObject wird in einer Get Methode des Globalen Log Objects instantiiert(bei bedarf).

Luckie 30. Apr 2011 12:03

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Wird denn eine Instanz der Klasse erzeugt?

himitsu 30. Apr 2011 12:03

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Also nocheinmal:
Wie wird dein Objekt von TFileLogObject erzeugt?

Ich bin mir fast sicher, daß spätestens dort der Fehler liegt. :glaskugel:

[edit]
mist, zu spät :lol:

DerTobi 30. Apr 2011 12:08

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
'Doh!

Ich wollte gerade die Get Methode posten und da renne ich über den Fehler.
Der ist schon zu peinlich zum posten!

Ich bitte vielmals um Entschuldigung das ich eure Zeit verschwendet habe! Trotzdem vielen vielen Dank für die Mühe!

himitsu 30. Apr 2011 12:29

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Dennoch wäre es gut, wenn man seine Erkenntnis mit anderen Teil,
denn davon lebt ein Forum.
Denn was passiert, wenn jemand Anderes auch irgendwann mal das gleiche Problem hat und niemand seine Lösungen veröffentlicht?

DerTobi 30. Apr 2011 13:19

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Stimmt auch wieder... nagut, dann poste ich den Anfängerfehler mal ^^

So sah die Get Methode aus:

Delphi-Quellcode:
function TLogObject.GetFileLog: TFileLogObject;
begin
  if FFileLog = NIL then
    FFileLog.Create;

  Result := FFileLog;
end;
So muss sie aussehen:

Delphi-Quellcode:
function TLogObject.GetFileLog: TFileLogObject;
begin
  if FFileLog = NIL then
    FFileLog := TFileLogObject.Create;

  Result := FFileLog;
end;
Die Variable zeigte ins leere

Luckie 30. Apr 2011 13:36

AW: AssignFile -> simples prinzip aber ich stolper trotzdem...
 
Da zeigt nichts ins Leere. Du hast den Konstruktor als gewöhnliche Methode aufgerufen. Dabei wird natürlich keine Instanz erzeugt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Seite 1 von 2  1 2      

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