(gelöst) Probleme Textdatei

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

(gelöst) Probleme Textdatei

Beitrag von Antrepolit »

Hallo Leute,

folgendes Problem:
Ich möchte eine Log-Datei erstellen. Dies machte ich ursprünglich mit AssignFile, in etwa so:

Im Create meines Errorlog-Objects

Code: Alles auswählen

...
AssignFile(LogFile,bPathFile);
ReWrite(LogFile);
...
und in der AppenLog-Methode dann

Code: Alles auswählen

WriteLn(LogFile, Cont);
wobei Cont ein String ist.

Nun, nach einiger "Überarbeitung" des Codes geht es einfach nicht mehr.

Zuvor verwendete ich einen TFileStream, der immer eine SIG SEGV-Exception beim .Write brachte,
davor kam gleiche Exception bei eben dem Writeln,
und nun kann ich nicht mal mehr eine Datei zuweisen??? Was mag da los sein?
Derzeit kann ich mit KEINER Methode in die Textdatei schreiben, es sei denn ich mache das

Code: Alles auswählen

Stream=TStream.Creats(blabla, fmCreate);
Stream.Write(blablabla,length(blablabla));
FreeAndNil(Stream);
Rufe ich Stream.Create im Constructor meines Logs auf, und möchte
Stream.Write in der AppendLog-Methode verwenden, kommt die Exception...
Zuletzt geändert von Antrepolit am So 17. Jan 2010, 23:36, insgesamt 1-mal geändert.
Grüße, Antrepolit

care only if your os is really burning

Benutzeravatar
theo
Beiträge: 10888
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme Textdatei

Beitrag von theo »

Antrepolit hat geschrieben:

Code: Alles auswählen

Stream=TStream.Creats(blabla, fmCreate);
Stream.Write(blablala,length(blablabla));
FreeAndNil(Stream);
Ein TStream kann nix. Das ist eine abstrakte Basisklasse. Du musst schon einen TFileStream oder TMemoryStream nehmen.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Probleme Textdatei

Beitrag von Antrepolit »

theo hat geschrieben: Ein TStream kann nix. Das ist eine abstrakte Basisklasse. Du musst schon einen TFileStream oder TMemoryStream nehmen.
Mein Fehler, es war natürlich TFileStream; das Problem besteht weiterhin.
Grüße, Antrepolit

care only if your os is really burning

Benutzeravatar
theo
Beiträge: 10888
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme Textdatei

Beitrag von theo »

Dann musst du den wahrsch. noch zum schreiben öffnen
FileStream := TFileStream.Create(FileName,fmCreate or fmOpenWrite);

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Probleme Textdatei

Beitrag von Antrepolit »

@Theo:

Nein, funktioniert immer noch nicht. Gleiche Exception.
Grüße, Antrepolit

care only if your os is really burning

Benutzeravatar
theo
Beiträge: 10888
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme Textdatei

Beitrag von theo »

Mehr sehe ich in dem Schnippsel auch nicht. Ist die Datei irgendwie gelockt? Hast du mal mit einer anderen probiert?

Ausserdem: Bei solchen Problemen sollte man genauer berichten. Sowas:
Stream.Write(blablabla,length(blablabla));
ist nicht dienlich.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Probleme Textdatei

Beitrag von Antrepolit »

Der ganze Code:

Code: Alles auswählen

unit ErrorLog;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, LResources, Forms, Controls, Graphics, Dialogs, SysUtils, StdCtrls,
  Menus, ExtCtrls, ComCtrls,
  Interfaces, Windows, Registry, Strings, WinSystem;
 
const
  EL_Insert_BR_Before = 1;
  EL_Insert_BR_After  = 2;
  EL_Insert_BR_Around = 3;
 
type
  TErrorLog = class(TObject)
  public
    constructor Create(const errLogPath: string; pFile: string = 'logfile.log';
      pUse: boolean = True);
    destructor Destroy; override;
    procedure ToLog(const cont: string);
  private
    TFS:      TFileStream;
    bPathFile: string;
  end;
 
implementation
 
constructor TErrorLog.Create(const errLogPath: string;
  pFile: string = 'logfile.log'; pUse: boolean = True);
var
  errPath: string;
begin
  inherited Create;
 
  if (errLogPath[length(errLogPath)] <> '\') then
    errPath := errLogPath + '\'
  else
    errPath := errLogPath;
 
  bPathFile := errPath + pfile;
 
  TFS := TFileStream.Create(bPathFile, fmCreate or fmOpenWrite);
  FreeAndNil(TFS);
end;
 
destructor TErrorLog.Destroy;
begin
  FreeAndNil(TFS);
  inherited Destroy;
end;
 
procedure TErrorLog.ToLog(const cont: string);
begin
  TFS.Write(Cont, length(cont));
end;
 
end.
Grüße, Antrepolit

care only if your os is really burning

Benutzeravatar
theo
Beiträge: 10888
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme Textdatei

Beitrag von theo »

Wat dat denn?

TFS := TFileStream.Create(bPathFile, fmCreate or fmOpenWrite);
FreeAndNil(TFS);

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Probleme Textdatei

Beitrag von Hitman »

Statt dem "if ..." kannst du übrigens einfach IncludeTrailingPathDelimiter nehmen ;)

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Probleme Textdatei

Beitrag von Antrepolit »

@Theo:

Überbleibsel von einem weiteren Test.
Auch nach den Entfernen der Zeile funktioniert es nicht...
Grüße, Antrepolit

care only if your os is really burning

Benutzeravatar
theo
Beiträge: 10888
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme Textdatei

Beitrag von theo »

und so?

TFS.Write(Cont[1], length(cont));

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Probleme Textdatei

Beitrag von Antrepolit »

Nein, immer noch.

Keiner ne Idee, woran es liegen könnte, dass auch das normale Write über Textfile nicht geht?
Grüße, Antrepolit

care only if your os is really burning

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Probleme Textdatei

Beitrag von Hitman »

Wenn man Hufe hört, denkt man besser erstmal an Pferde, als an Zebras ... rufst du vlt. ToLog irgendwo auf, wo das Logging Objekt noch nicht erstellt wurde? Oder erstellst du das Logging Objekt vlt. "falsch"? Eventuell ist das nicht ganz trivial zu debuggen, da ja der Programmablauf entscheidend ist. Aber du kannst uns ja z.B. mal den Code zeigen, wo du TErrorLog instanziierst.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

(gelöst) Probleme Textdatei

Beitrag von Antrepolit »

@Hitman: Du lagst richtig,die Instanziierung war falsch.

Dort stand nut noch >>TErrorLog.Create...<<

Da muss mich der Affe gelaust haben, dass ich da das >>ErrorLog :=<< davor weggenommen hab. :oops:
Man finde mal solch einen Fehler, der ja syntaktisch und semantisch keiner ist... :roll:

Danke!
Grüße, Antrepolit

care only if your os is really burning

Antworten