我有这个代码单元:(我在Win XP sp 3上运行Delphi 7)。
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
CONST
EOL = #13#10;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Procedure StringToStream(Ofile : TFileStream; Const StrValue : String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
Curdir : String;
Ofile : TFileStream;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Ofile := TFileStream.Create(curdir + '\TESTfil.HTML', fmCreate,fmsharedenynone);
try
StringToStream(Ofile, '<HTML><BODY> </BODY></HTML>' + EOL);
// StringToStream(Ofile, '</BODY></HTML>' + EOL);
finally
Ofile.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Curdir := ExtractFileDir(Application.ExeName);
end;
Procedure Tform1.StringToStream(Ofile : TFileStream; Const StrValue : String);
BEGIN
IF length(StrValue) > 0 then
Ofile.Write(StrValue,length(StrValue));
Ofile.Write('testpunkt',9);
END;
这个单位的输出是:
"28 non printable characters" + "\testpunkt"
我试过把字符串变成&#34; CONST&#34; 。 - &GT;同样的错误
我用PCHAR试过了 - 有很多错误......(主要是语法错误)
我已将INDY7更改为INDY9以获取idGlobal.WriteStringtoStream() - 但该特定的INDY-9不支持WriteStringToStream。
我做错了什么?
答案 0 :(得分:5)
您已写入字符串的地址而不是其内容。要将字符串写入流,请使用以下代码:
procedure TForm1.StringToStream(Ofile: TFileStream; const StrValue: string);
begin
Ofile.WriteBuffer(Pointer(StrValue)^, Length(StrValue));
end;
这里我已经取消引用指针,因此写了字符串的内容。
注意:
Length(StrValue)
是合理的。如果您转移到Unicode,则必须修改代码以解决编码问题。WriteBuffer
而不是Write
,因为前者会在出现错误时引发异常,与Write
相反。