Entwickler-Ecke

Dateizugriff - File Of Char


lemming - Di 23.07.02 11:17
Titel: File Of Char
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?


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 - Di 23.07.02 13:37
Titel: Re: File Of Char
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:

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 - 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 - 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