AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Filestream, string anhängen

Ein Thema von eLse-maestro · begonnen am 16. Jan 2008 · letzter Beitrag vom 18. Jan 2008
Antwort Antwort
Seite 1 von 3  1 23      
eLse-maestro

Registriert seit: 14. Okt 2006
24 Beiträge
 
#1

Filestream, string anhängen

  Alt 16. Jan 2008, 22:26
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..
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Filestream, string anhängen

  Alt 16. Jan 2008, 22:37
Zitat von eLse-maestro:
TFileStream.Create('test',fmOpenReadWrite or fmShareExclusive);
Vielleicht existiert die Datei 'test' einfach nicht

MfG,
Hanno
Hanno Günther
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

Re: Filestream, string anhängen

  Alt 16. Jan 2008, 22:39
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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
eLse-maestro

Registriert seit: 14. Okt 2006
24 Beiträge
 
#4

Re: Filestream, string anhängen

  Alt 16. Jan 2008, 22:46
@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...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Filestream, string anhängen

  Alt 16. Jan 2008, 23:19
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));
  Mit Zitat antworten Zitat
eLse-maestro

Registriert seit: 14. Okt 2006
24 Beiträge
 
#6

Re: Filestream, string anhängen

  Alt 17. Jan 2008, 13:00
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    fs.Read(s1,length(s));
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Filestream, string anhängen

  Alt 17. Jan 2008, 13:08
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Filestream, string anhängen

  Alt 17. Jan 2008, 13:09
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    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...
  Mit Zitat antworten Zitat
eLse-maestro

Registriert seit: 14. Okt 2006
24 Beiträge
 
#9

Re: Filestream, string anhängen

  Alt 17. Jan 2008, 13:33
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Filestream, string anhängen

  Alt 17. Jan 2008, 13:39
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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