У меня есть этот код: (я запускаю Delphi 7 на Win XP sp 3).TFileStream ведет себя очень странно
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"
Я попытался сделать строку «ФИКС». -> та же ошибка
Я пробовал с PChar в - есть много ошибок ... (в основном синтаксические ошибки)
Я изменил INDY7 к INDY9, чтобы получить idGlobal.WriteStringtoStream() - но это конкретный INDY-9 не поддерживает WriteStringToStream.
Что я делаю неправильно?
На несвязанной ноте вы должны серьезно объявлять 'Curdir' и' Ofile' в классе формы, а не в модуле, а 'StringToStream' не должны быть объявлены над' private', а скорее под ' частный или публичный, в зависимости от требуемого объема. Пространство над 'private' обычно контролируется IDE. –
@ Джерри Додж: Вы совершенно правы. Это устройство должно было быть очень преждевременным примером. И поскольку я не сделал это, я сделал несколько ярлыков, чтобы сократить код. Я мой настоящий код, я сделаю, как вы предлагаете. Спасибо за советы. –