![]() |
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:
so.. jetzt wollte ich aber den string von einer anderen EXE auslesen (später dann die background.exe)
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;
Delphi-Quellcode:
und dann kommt immer eine zugriffsverletztung, und ich habe schon alles probiert :(
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; 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.. |
Re: Filestream, string anhängen
Zitat:
MfG, Hanno |
Re: Filestream, string anhängen
Wenn du
Delphi-Quellcode:
wirst du merken, dass die Funktion nicht wirklich das macht was du erwartest...
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; 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 |
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... |
Re: Filestream, string anhängen
Delphi-Quellcode:
alternativ
if s <> '' then
fs.Write(s[1], length(s));
Delphi-Quellcode:
alternativ
if s <> '' then
fs.Write(PChar(s)^, length(s));
Delphi-Quellcode:
if s <> '' then
fs.Write(Pointer(s)^, length(s)); |
Re: Filestream, string anhängen
Delphi-Quellcode:
habe ich probiert, sowie die anderen beispiele.. aber ich bekomme immer noch eine fehler meldung beim auslesen..
if s <> '' then
fs.Write(PChar(s)^, length(s)); fs.read
Delphi-Quellcode:
fs.Read(s1,length(s));
|
Re: Filestream, string anhängen
Hi,
hier eine Detailstudie:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: Filestream, string anhängen
Zitat:
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... |
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 |
Re: Filestream, string anhängen
Zitat:
Delphi-Quellcode:
Durch fs.Free wird der Stream aber auf die Festplatte geschrieben.
begin
// ... fs.Position := 0; // fs.Free; // fs := TFileStream.Create(fn, fmOpenRead); // ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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-2025 by Thomas Breitkreuz