免费帕斯卡无法写入文本文件



我正在尝试用免费的pascal向文本文件写入一些东西,但它没有写入任何东西。

这是我的代码:

program start;
uses crt;
type txt = file of string;
var 
h : string;
f : txt;
begin
assign(f,'hey.txt');
rewrite(f);
h := 'jmhtdjh';
write(f,h);
close(f);
readkey;
end.

在我解释你的代码之前,请编译并运行以下程序:

program TextFileCreate;
var
F : Text;
begin
Assign(F, 'C:temptest.txt');
Rewrite(F);
Writeln(F, 'testing ...');
Close(F);
Readln;
end.

它可以在Windows 10上编译并运行良好,您可以确认它确实如此 通过使用记事本打开文件。 它使用内置的Text文件类型,这是特别的 用于使用 .Txt 文件

转向你的程序,起初我认为你的问题只是你不是 指定应保存文件的路径,因此我建议更改Assign声明宣读

assign(f, 'C:TempHey.Txt');

但是,当我尝试使用该更改编译您的代码时,我收到了错误

FileOfString.lpr(7,26( 错误:类型化文件不能包含引用计数类型。

. 错误的原因是我的拉撒路 默认编译器设置,字符串是所谓的"巨大字符串",最高可达 2Gb 长度和引用计数,如错误消息所示。 FPC支持两个 字符串的类型,这些"巨大的字符串"和传统的Pascal"短字符串",其中 长度最多只能为 255 个字符,并且前面有一个"长度字节",该字节 记录字符串的长度。 可以使用 {$H} 编译器指令在这些字符串类型之间切换。

所以我更改了您的代码,如下所示:

program FileOfString;
uses crt;
{$H-}  //  means use short strings
type txt = file of string;
var
h : string;
f : txt;
begin
assign(f,'c:temphey.txt');
rewrite(f);
h := 'jmhtdjh';
write(f,h);
close(f);
readkey;
end.

确实编译并将文件写入了 c:\temp 文件夹.txt我可以打开它 用记事本。 但是,内容可能不是您所期望的,因为jmhtdjh前面是我提到的长字节,即 Chr(7(,所以在 字符串开头的记事本看起来像一个空心矩形。

坦率地说,不值得花费任何时间尝试"修复"此问题,只需使用 改为text文件类型提供。

最新更新