gpt4 book ai didi

delphi - TFileStream 的行为很奇怪

转载 作者:行者123 更新时间:2023-12-03 18:20:53 30 4
gpt4 key购买 nike

我有这个代码单元:(我在 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" 

我试图使字符串成为 "CONST"。 --> 同样的错误

我用 PCHAR 试过了——有很多错误……(主要是语法错误)

我已将 INDY7 更改为 INDY9 以获取 idGlobal.WriteStringtoStream() - 但特定的 INDY-9 不支持 WriteStringToStream 。

我做错了什么?

最佳答案

你写的是字符串的地址而不是它的内容。要将字符串写入流,请使用以下代码:

procedure TForm1.StringToStream(Ofile: TFileStream; const StrValue: string);
begin
Ofile.WriteBuffer(Pointer(StrValue)^, Length(StrValue));
end;

在这里我取消了指针的引用并写入了字符串的内容。

注意事项:

  • 此代码不需要检查字符串是否为空。
  • 由于您使用的是 Delphi 7 并且字符串是 ANSI,因此传递 Length(StrValue) 是合理的。如果您转向 Unicode,则必须修改代码以解决编码问题。
  • 我使用 WriteBuffer 而不是 Write,因为与 Write 相比,前者会在发生错误时引发异常。<
  • 您的代码假定写入与可执行文件相同的目录是安全的。如果您部署了您的程序,这种假设很可能会被打破。
  • 您对全局变量的使用只会让您跌倒。尽量使用局部变量,作为参数传递的变量,类的数据成员。避开全局变量。
  • 编写 XML 充满了复杂性。尝试使用原始字符串操作这样做可能会在未来的某个时候导致许多编码问题。明智的做法是现在使用 XML 库,这样您以后就不必重新编写代码。

关于delphi - TFileStream 的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220669/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com