Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei wird beim erstellen gelöscht (https://www.delphipraxis.net/41886-datei-wird-beim-erstellen-geloescht.html)

RavenIV 10. Mär 2005 11:08


Datei wird beim erstellen gelöscht
 
ich benutze TFileStream, um einen text in eine datei zu schreiben.
jedesmal, wenn ich TFielStream.create aufrufe, wird die datei aber gelöscht.

mein System: delphi7 mit WinXP.

hier der code:
Delphi-Quellcode:
procedure TFoRemotetest.IBSQLMonitorSQL (EventText: string; EventTime: TDateTime);
var
  FileName: string;
  EventStream: TStringStream;
  FileObj: TFileStream;
begin
  FileName := 'D:\db_i.log';
  EventStream := TStringStream.Create(EventText);
  FileObj := TFileStream.Create (FileName, fmCreate);
  FileObj.CopyFrom(EventStream,0);
   FileObj.Free;
end;
irgendeine lösung?

gruessle

Sprint 10. Mär 2005 11:11

Re: Datei wird beim erstellen gelöscht
 
Zitat:

Zitat von RavenIV
jedesmal, wenn ich TFielStream.create aufrufe, wird die datei aber gelöscht.

Dann solltest du mal die Delphi Hilfe aufschlagen und die Bedeutung von fmCreate lesen.

RavenIV 10. Mär 2005 11:20

Re: Datei wird beim erstellen gelöscht
 
die OH sagt für fmCreate:
Zitat:

Es wird eine Datei mit dem angegebenen Namen angelegt. Ist eine Datei mit diesem Namen bereits vorhanden, wird die Datei zum Schreiben geöffnet.
also sollte die datei doch nicht jedesmal neu erstellt werden.

Sprint 10. Mär 2005 11:34

Re: Datei wird beim erstellen gelöscht
 
Zitat:

Zitat von RavenIV
also sollte die datei doch nicht jedesmal neu erstellt werden.

Aber so wie es aussieht, bist du zu einem anderem Ergebnis gekommen.

Delphi-Quellcode:
procedure TFoRemotetest.IBSQLMonitorSQL (EventText: string; EventTime: TDateTime);
var
  FileName: String;
  Handle: Integer;
begin

  FileName := 'D:\db_i.log';

  if FileExists(FileName) then
    Handle := FileOpen(FileName, fmOpenReadWrite)
  else
    Handle := FileCreate(FileName);

  if Handle <> -1 then
  begin
    FileSeek(Handle, 0, 2);
    FileWrite(Handle, EventText[1], Length(EventText));
    FileClose(Handle);
  end;

end;

RavenIV 10. Mär 2005 12:03

Re: Datei wird beim erstellen gelöscht
 
servus Sprint

deine Lösung ist auch schön.
aber ich liebe streams und ich liebe objekte und ich liebe exceptions.

jedem das seine, mir das meiste...


P.S. die lösung meines problems:
Delphi-Quellcode:
procedure TFoRemotetest.IBSQLMonitorSQL (EventText: string; EventTime: TDateTime);
var
  FileName: string;
  EventStream: TStringStream;
  FileObj: TFileStream;
begin
  FileName := 'D:\db_i.log';
  EventStream := TStringStream.Create (EventText);
  try
    FileObj := TFileStream.Create (FileName, fmOpenReadWrite or fmShareDenyNone);
  except
    FileObj := TFileStream.Create (FileName, fmCreate or fmShareDenyNone);
  end;
  FileObj.Seek (FileObj.Size, soFromBeginning);
  FileObj.CopyFrom (EventStream, 0);
  FileObj.Free;
end;
gruessle

Sprint 10. Mär 2005 12:10

Re: Datei wird beim erstellen gelöscht
 
Sollte die Datei nicht existieren, dann wird FileObj zweimal erstellt, aber nur einmal freigegeben.

Binärbaum 10. Mär 2005 14:26

Re: Datei wird beim erstellen gelöscht
 
Zitat:

Zitat von Sprint
Sollte die Datei nicht existieren, dann wird FileObj zweimal erstellt, aber nur einmal freigegeben.

Mindestens genauso schlimm ist, dass EventStream nur mit Create erzeugt wird und danach nicht mehr freigegeben wird.

MfG
Binärbaum

RavenIV 10. Mär 2005 14:31

Re: Datei wird beim erstellen gelöscht
 
hier nun eine mischung aus allen vorschlägen:
Delphi-Quellcode:
procedure TFoRemotetest.IBSQLMonitorSQL (EventText: string; EventTime: TDateTime);
var
  FileName: string;
  EventStream: TStringStream;
  FileObj: TFileStream;
begin
  FileName := 'D:\db_i.log';
  EventStream := TStringStream.Create (DateTimeToStr (EventTime) + EventText + ''#13#10'');
  if FileExists (FileName) then
    FileObj := TFileStream.Create (FileName, fmOpenReadWrite or fmShareDenyNone)
  else
    FileObj := TFileStream.Create (FileName, fmCreate or fmShareDenyNone);
  try
    FileObj.Seek (FileObj.Size, soFromBeginning);
    FileObj.CopyFrom (EventStream, 0);
  finally
    FileObj.Free;
  end;
  EventStream.Free;
end;
hier dürfte alles OK sein...

Binärbaum 10. Mär 2005 14:33

Re: Datei wird beim erstellen gelöscht
 
Zitat:

Zitat von RavenIV
hier dürfte alles OK sein...

Ja, ist schon viiiiiel besser als der Code vom Anfang :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 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 by Thomas Breitkreuz