Was meinst du mit "Pointer verwenden"?
Ich hatte mal einen Versuch mit TFileStream gemacht, dort hatte ich auch mit Pointer gearbeitet.
Aber ich sehe gerade, das ich hinter Pointer noch ein ^ gesetzt habe.
Code: Alles auswählen
var
fs: TFileStream;
// s: string;
s: array of char;
procedure Ausgabe(s: array of char);
var
i: integer;
begin
WriteLn(Length(s));
for i := 0 to Length(s) - 1 do begin
Write(s[i]);
end;
WriteLn();
for i := 0 to Length(s) - 1 do begin
Write(byte(s[i]), ' ');
end;
WriteLn();
end;
begin
fs := TFileStream.Create('Test.txt', fmCreate);
try
s := 'Test';
Ausgabe(s);
fs.Write(Pointer(s)^, Length(s));
fs.Write(PChar(s)^, Length(s));
fs.Write(s[0], Length(s));
s := '';
fs.Write(Pointer(s)^, Length(s));
fs.Write(PChar(s)^, Length(s));
fs.Write(s[0], Length(s)); // Hier knallt es
s := 'Letzt Zeile';
fs.Write(Pointer(s)^, Length(s));
finally
fs.Free;
end;
fs := TFileStream.Create('Test.txt', fmOpenRead);
try
s := ' ';
fs.Read(Pointer(s)^, Length(s));
Ausgabe(s);
fs.Read(PChar(s)^, Length(s));
Ausgabe(s);
fs.Read(s[0], Length(s));
WriteLn(PChar(s));
s := '';
fs.Read(Pointer(s)^, Length(s));
Ausgabe(s);
fs.Read(PChar(s)^, Length(s));
Ausgabe(s);
s := ' ';
fs.Read(Pointer(s)^, Length(s));
Ausgabe(s);
fs.Read(s[0], Length(s)); // Hier knallt es
finally
fs.Free;
end;
ReadLn;
end.