AGB  ·  Datenschutz  ·  Impressum  







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

String in einer Textdatei anhängen

Ein Thema von Moony · begonnen am 30. Aug 2007 · letzter Beitrag vom 31. Aug 2007
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

String in einer Textdatei anhängen

  Alt 30. Aug 2007, 17:43
Hallo zusammen,

ich hab da ein Problem mit dem Verschlucken von Bytes und weiß einfach nicht weiter. Ich möchte jedes Mal bei einer bestimmten Aktion Daten in eine Datei schreiben. Der Hintergrund ist, ich habe eine bestimmte Länge eines Strings, welcher jedes Mal variabel ist. Dieser String wird verkryptet, sodass ich als Rückgabewert einen String mit Mülldaten habe. Die Länge des neuen Strings ist immer gleich; in meinem Fall immer 400 Bytes. Diese 400 Bytes möchte ich jedesmal in eine Textdatei schreiben, indem ich immer die 400 Bytes in die Datei anhänge. Dies geschieht folgendermaßen:

Delphi-Quellcode:
var
  linesize : Integer;
  line : String;
  LogFile : TextFile;
begin
...
AssignFile(LogFile, "meine Datei");
try
  if FileExists("meine Datei") then
    Append(LogFile)
  else Rewerite(LogFile);

  linesize := 0;
  linesize := length(line);
  Writeln(Logfile, EncText(line,linesize)); // EncText ist eine Funktion zum verkrypten des Strings
finally
  CloseFile(LogFile);
end;
...
end;
Mein Problem besteht darin, dass unkoordiniert nach ein paar Mal schreiben die Bytes fehlen. Normalerwesise müssten es immer plus 402 Bytes sein (meine 400 plus 2 Bytes der CarriageReturn vom Writeln), aber der verschluckt die Bytes sporadisch. Kann mir bitte jemand sagen warum??? Ich drehe hier noch durch ...Der Rückgabewert meiner EncText-Routine hat definitiv die Länge 400.

Danke im Voraus.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: String in einer Textdatei anhängen

  Alt 30. Aug 2007, 17:48
Versuchs mal damit.
So können auch binäre Daten (wie z.B. #$00) die bei Verschlüsseln entstanden sind
gespeichert werden.
Delphi-Quellcode:
procedure AppendStringToFile(const s:String; const filename:string);
var
   stream : TStream;
const
   SO_END=2;
begin
   if s = 'then
      Exit;
   if FileExists(filename) then
   begin
      stream := TFileStream.Create(filename, fmOpenReadWrite or fmShareDenyWrite);
      stream.Seek(0, SO_END);
   end
   else
      stream := TFileStream.Create(filename, fmCreate or fmShareDenyWrite);
   try
      stream.Writebuffer(s[1], Length(s));
   finally
      stream.Free;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

Re: String in einer Textdatei anhängen

  Alt 30. Aug 2007, 17:58
Supper, das funktionert wunderbar. Nur der Carriagereturn ist nicht da, aber das ist nicht schlimm.

Ich möchte es irgendwie trotzdem verstehen können, warum die Bytes verschluckt werden, obwohl immer die gleiche Anzahl an Daten übergeben werden.

Was ist dann der Unterschied ob ich direkt in eine Datei schreibe, oder erst über den Speicher in die Datei schreibe?
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: String in einer Textdatei anhängen

  Alt 30. Aug 2007, 18:13
Deine Variante vewendet die uralte Funktion WriteLn.
Die Funktion stammt noch aus Pascal Gründungszeiten und hat eine Text- und eine binäre Betriebsart.
Es gibt da noch eine gepufferte Zwischenschicht (in Assembler geschrieben),
die zu den Zeiten ihre Berechtigung hatte, als Windows oder MS-DOS noch keinen Plattencache hatten.
Heute ist diese Pufferschicht eher störend.
TFileStream ist viel näher am Betriebssystem und gibt die Daten 1:1 weiter.
Wenn du den CR-LF auch speichern möchtest dann:
AppendStringToFile(EncText(line,linesize)+#13#10,'meine Datei')
Andreas
  Mit Zitat antworten Zitat
30. Aug 2007, 22:53
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#6

Re: String in einer Textdatei anhängen

  Alt 31. Aug 2007, 07:47
Vielen Dank. Jetzt hab ichs begriffen.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:15 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