Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Filestream, string anhängen (https://www.delphipraxis.net/106799-filestream-string-anhaengen.html)

eLse-maestro 16. Jan 2008 22:26


Filestream, string anhängen
 
Hi leute,
Ich bin am verzweifeln ..

Ich möchte einen string an eine datei anhängen, und mit der datei den string auslesen..

dieser code klappt super..
Ich habe hier einen string angehangen, und direkt wieder ausgelesen..
Delphi-Quellcode:
var fs:tfilestream; s,s1:string;i:integer;
begin

  fs:=tfilestream.Create('C:\background.exe',
   fmOpenReadWrite or fmShareExclusive);
  try
    i:=fs.Seek(0, soFromEnd);
    s:='[test]';
    fs.Write(s,sizeOf(s));
    fs.Seek(i, soFromBeginning);
    fs.Read(s1,sizeOf(s1));
    showmessage(s1);

  finally
    fs.Free;
  end;
so.. jetzt wollte ich aber den string von einer anderen EXE auslesen (später dann die background.exe)

Delphi-Quellcode:
var fs:tfilestream; s1:string; i:integer;
begin

  fs:=tfilestream.Create('background.exe',
  fmOpenReadWrite or fmShareExclusive);
  try
    i=fs.Seek(0, soFromEnd);
    fs.Seek(i-4,soFromBeginning); //minus 4, weil der string 4 byte hat, und dort die andere datei auch den string ausliest.
    fs.Read(s1,sizeOf(s1));
    showmessage(s1);
  finally
    fs.Free;
und dann kommt immer eine zugriffsverletztung, und ich habe schon alles probiert :(

Vielleicht kann mir ja einer helfen, vielen dank.

mfg
else_

PS:
es soll später einen "builder" geben, der an die exe ein pfad von einem hintergrund hängt, und wenn man die exe ausführt, dass der hintergrund, der im builder eingestellt wurde, geändert wird..

HannosG 16. Jan 2008 22:37

Re: Filestream, string anhängen
 
Zitat:

Zitat von eLse-maestro
TFileStream.Create('test',fmOpenReadWrite or fmShareExclusive);

Vielleicht existiert die Datei 'test' einfach nicht :stupid:

MfG,
Hanno

BUG 16. Jan 2008 22:39

Re: Filestream, string anhängen
 
Wenn du
Delphi-Quellcode:
var fs:tfilestream; s,s1:string;i:integer;
begin

  fs:=tfilestream.Create('C:\background.exe',
   fmOpenReadWrite or fmShareExclusive);
  try
    i:=fs.Seek(0, soFromEnd);
    s:='[test]';
    fs.Write(s,sizeOf(s));
    s:=''; // hier s leerst
    fs.Seek(i, soFromBeginning);
    fs.Read(s1,sizeOf(s1));
    showmessage(s1);

  finally
    fs.Free;
  end;
wirst du merken, dass die Funktion nicht wirklich das macht was du erwartest...

Strings in Delphi könnte man auch vereinfacht als Zeiger auf einen Adressbereich sehen. Du schreibst also nicht die Zeichenkette in die Datei, sondern den Zeiger darauf.

MfG,
Bug

eLse-maestro 16. Jan 2008 22:46

Re: Filestream, string anhängen
 
@hannos, nein daran lag es nicht, hatte es nur vergessen zum schluss zu editieren.. (gemacht :) )

das mit dem zeiger kann sehr gut sein, auf die idee bin ich noch gar nicht gekommen..
wie kann ich denn das ganze umgehen?
mit einem byte array?
damit habe ich mich noch nicht beschäftigt...

Muetze1 16. Jan 2008 23:19

Re: Filestream, string anhängen
 
Delphi-Quellcode:
if s <> '' then
  fs.Write(s[1], length(s));
alternativ

Delphi-Quellcode:
if s <> '' then
  fs.Write(PChar(s)^, length(s));
alternativ

Delphi-Quellcode:
if s <> '' then
  fs.Write(Pointer(s)^, length(s));

eLse-maestro 17. Jan 2008 13:00

Re: Filestream, string anhängen
 
Delphi-Quellcode:
if s <> '' then
  fs.Write(PChar(s)^, length(s));
habe ich probiert, sowie die anderen beispiele.. aber ich bekomme immer noch eine fehler meldung beim auslesen..
fs.read
Delphi-Quellcode:
    fs.Read(s1,length(s));

marabu 17. Jan 2008 13:08

Re: Filestream, string anhängen
 
Hi,

hier eine Detailstudie:

Delphi-Quellcode:
var
  fs: TFileStream;
  fn, s: string;
begin
  s := 'Die Lust zu gehorchen befriedigt der Deutsche an einer roten Ampel'
     + sLineBreak;
  fn := 'c:\temp\test-stream.txt';
  fs := TFileStream.Create(fn, fmCreate);
  fs.Write(s[1], Length(s));
  s := '?'; // Length(s) = 1
  fs.Free;
  fs := TFileStream.Create(fn, fmOpenRead);
  SetLength(s, fs.Size); // omit for disaster
  fs.Read(s[1], fs.Size);
  fs.Free;
  ShowMessage(s);
end;
Grüße vom marabu

Muetze1 17. Jan 2008 13:09

Re: Filestream, string anhängen
 
Zitat:

Zitat von eLse-maestro
Delphi-Quellcode:
if s <> '' then
  fs.Write(PChar(s)^, length(s));
habe ich probiert, sowie die anderen beispiele.. aber ich bekomme immer noch eine fehler meldung beim auslesen..
fs.read
Delphi-Quellcode:
    fs.Read(s1,length(s));

Man könnte Analogien sehen - man könnte, muss man aber nicht.

Wenn das Schreiben des Strings nicht funktioniert, wenn man direkt den String angibt und einem schon zuvor gesagt wurde, dass man nur die Adresse in den Stream schreibt, dann könnte man vermuten, dass es beim auslesen wohl genauso ist.

Also Maestro, das bekommste nach diesem Zaunpfahl doch bestimmt vom Lesen auf's Schreiben übertragen, oder?

@marabu: das wäre dann der nächste Schritt gewesen...

eLse-maestro 17. Jan 2008 13:33

Re: Filestream, string anhängen
 
ah vielen dank,
ja ich bin ja auch nicht einer der direkt nachfragt..
aber im internet habe ich nur unbrauchbares gefunden, und in meinem buch (jetzt lerne ich delphi)
steht es mir zu ungenau drin, und sonst habe ich nur was mit byte arrays gefunden.
aber ehrlich gesagt trau ich mich nur an einen code den ich auch versteh..

und ich wusste nicht das man vor dem lesen erst den filestream wieder freigeben muss..

dankschön nochmal

marabu 17. Jan 2008 13:39

Re: Filestream, string anhängen
 
Zitat:

Zitat von eLse-maestro
... und ich wusste nicht das man vor dem lesen erst den filestream wieder freigeben muss ...

Das interpretierst du falsch, es geht natürlich auch so:

Delphi-Quellcode:
begin
  // ...
  fs.Position := 0;
  //  fs.Free;
  //  fs := TFileStream.Create(fn, fmOpenRead);
  // ...
end;
Durch fs.Free wird der Stream aber auf die Festplatte geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.
Seite 1 von 3  1 23      

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-2025 by Thomas Breitkreuz