Autor Beitrag
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 23.07.02 11:17 
Hi!

Ich brauche eine vernünftige Procedure di mir einenen AnsiString in eine Binäre Datei speichert. Ich bekomme den Inhalt eines TMemoryStream als AnsiString von einer UDP Komponente. Da werden Dateien übertragen. D. h. das der AnsiString bis zu 10MB gross sein kann.

Jetzt speichere ich den AnsiString so in eine datei. Gibt es aber keine bessere Methode?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
var
  F: File of Char;
  sFilename: String;
  sFileString: AnsiString;
  TmpStr: AnsiString;
  Ch: Char;
  iTmpLen: Integer;
  iAscii: Integer;

      AssignFile(F, sFilename);
      Reset(F);
        Seek(F, FileSize(F));
        for iTmpLen := 1 To Length(sFileString) Do
        begin
          //Ch := Copy(TmpStr, iTmpLen, 1);
          for iAscii := 0 To 255 Do
          begin
            if Chr(iAscii) = Copy(sFileString, iTmpLen, 1) Then
            begin
              Ch := Chr(iAscii);
              break;
            end;
          end;
          Write(F, Ch);
        end;
      CloseFile(F);


Ja ich weiss, einfach schrecklich langsam.[/code]
mth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34



BeitragVerfasst: Di 23.07.02 13:37 
lemming hat folgendes geschrieben:

Ich bekomme den Inhalt eines TMemoryStream als AnsiString von einer UDP Komponente.


Schmeiss die Komponente weg kommt mir da in den Sinn :-)

lemming hat folgendes geschrieben:

Jetzt speichere ich den AnsiString so in eine datei. Gibt es aber keine bessere Methode?


Eine (relativ elegante) Variante wäre die folgende:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  FS: TFileStream;

begin
  FS := TFileStream.Create (bla bla)
  try
    fs.Write(PChar(MegaAnsiString)^, Length(MegaAnsiString));  
  finaly
    fs.Free;
  end;
end;
lemming Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 23.07.02 15:11 
Ok, und wie schreib ich das dann in die Datei? Write(F, FS) geht ja nicht? *grübel*
lemming Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 23.07.02 15:20 
Haaaaaaaaaaaaaaaaaaaaaaaaalt.

Rtfm! manchmal steht wirklich was nützliches in der hilfe. Hab's schon selbst raus gefunden. Also Danke schööööööööön :D