Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu TFileStream (https://www.delphipraxis.net/47640-frage-zu-tfilestream.html)

perle 14. Jun 2005 09:23


Frage zu TFileStream
 
Hallo, ich möchte gerne ein Datum ans ende meiner Datei hängen aber es will nicht so recht klappen, aber warum nicht?


Dies hier wird von einer zweiten exe ausgeführt :
Delphi-Quellcode:
begin
  with TFileStream.Create('test.exe',fmOpenWrite) do
  begin
    Seek(-SizeOf(TDateTime),soFromEnd);
    Write(Now, SizeOf(TDateTime));
    Free;
  end;
end;
und dann zum auslesen direkt in der test.exe

Delphi-Quellcode:
var
  myDate : TDateTime;
begin
  with TFileStream.Create('test.exe',fmShareDenyNone) do
  begin
    Seek(-SizeOf(TDateTime),soFromEnd);
    Read(myDate,SizeOf(TDateTime));
    Free;
  end;
  Showmessage(DateTimeToStr(myDate));
end;

Rufe ich die test.exe auf, bevor ich da was reingeschrieben hab, dann zeigt mir das showmessage : 30.12.1899 an....ist ja auch klar, weil am ende der Datei nur nullen stehen.
Schreibe ich aber was dran und führe das Programm dann nochmal auf gibts "Ungültige Gleitoperation". Aber was mache ich falsch?

franktron 14. Jun 2005 09:26

Re: Frage zu TFileStream
 
Zitat:

Zitat von perle
Hallo, ich möchte gerne ein Datum ans ende meiner Datei hängen aber es will nicht so recht klappen, aber warum nicht?


Dies hier wird von einer zweiten exe ausgeführt :
Delphi-Quellcode:
begin
  with TFileStream.Create('test.exe',fmOpenWrite) do
  begin
    Seek(-SizeOf(TDateTime),soFromEnd);
    Write(Now, SizeOf(TDateTime));
    Free;
  end;
end;

Weil das so heisen muss
Delphi-Quellcode:
begin
  with TFileStream.Create('test.exe',fmOpenWrite) do
  begin
    Seek(0,soFromEnd);
    Write(Now, SizeOf(TDateTime));
    Free;
  end;
end;

Muetze1 14. Jun 2005 09:38

Re: Frage zu TFileStream
 
Moin!

Zitat:

Zitat von franktron
Weil das so heisen muss
Delphi-Quellcode:
begin
  with TFileStream.Create('test.exe',fmOpenWrite) do
  begin
    Seek(0,soFromEnd);
    Write(Now, SizeOf(TDateTime));
    Free;
  end;
end;

Weil es aber eigentlich so heissen muss

Delphi-Quellcode:
begin
  with TFileStream.Create('test.exe',fmOpenWrite) do
  begin
    Try
      Seek(SizeOf(TDateTime), soFromEnd);
      Write(Now, SizeOf(TDateTime));
    Finally
      Free;
    End;
  end;
end;
Weil laut seinem Code zuvor wollte er die letzten Bytes (sizeof(TDateTime)) damit überschreiben und nicht hinten anhängen...

@Threadersteller: Und grundlegend: vom soFromEnd gibt an, wieviele Bytes vor dem Ende - daher eine positive Zahl.

MfG
Muetze1

perle 14. Jun 2005 10:00

Re: Frage zu TFileStream
 
danke für die Vorschläge, leider hat es zu keinem brauchbaren Ergebnis geführt...hier noch die genauen Codes :


Delphi-Quellcode:
  with TFileStream.Create('Project18.exe',fmOpenWrite) do
  begin
    Try
      Seek(SizeOf(TDateTime), soFromEnd);
      Write(Now, SizeOf(TDateTime));
    Finally
      Free;
    End;
  end;
und
Delphi-Quellcode:
var
  myDate : TDateTime;
begin
  with TFileStream.Create('Project18.exe',fmShareDenyNone) do
  begin
    Seek(SizeOf(TDateTime),soFromEnd);
    Read(myDate,SizeOf(TDateTime));
    Free;
  end;
  Showmessage(DateTimeToStr(myDate));
end;
Jetzt gibt es zwar keinen Fehler mehr, allerdings bekomm ich immer : 30.12.1899 ausgegeben

marabu 14. Jun 2005 10:46

Re: Frage zu TFileStream
 
Bevor du den timestamp raus schreibst, solltest du Now() in einer Variable speichern.

Grüße vom marabu

perle 14. Jun 2005 10:53

Re: Frage zu TFileStream
 
mh ne sorry, hilft nix

perle 14. Jun 2005 11:03

Re: Frage zu TFileStream
 
mh ok jetzt gehts....musste aber wohl doch -SizeOf(TDateTime) heißen

Muetze1 14. Jun 2005 11:05

Re: Frage zu TFileStream
 
Moin!

Dann, willst du das aber hinten anhängen und nicht die letzten 8 Bytes mit dem TimeStamp überschreiben...

Was denn nun? Und sicher, das die EXE nicht immer grösser wird?

MfG
Muetze1

perle 14. Jun 2005 11:28

Re: Frage zu TFileStream
 
ob es nun hinten dran kommt, oder der Rest überschrieben wird ist im Grunde egal. Dies wird ohnehin nur Einmal gemacht, d.h. der Faktor, dass das Programm immer größer werden würde, ist zu vernachlässigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 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