【问题标题】:Free pascal can't write to a text file [closed]免费帕斯卡无法写入文本文件[关闭]
【发布时间】:2020-06-22 16:15:21
【问题描述】:

我正在尝试用 free 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.

【问题讨论】:

  • @lurker:非常感谢 lurker,我已修复它,但它仍然无法正常工作。
  • 这很奇怪。我可以编译你的程序,运行它,hey.txt 出现在当前文件夹中,内容为“jmhtdjh”。最后没有换行符,因此请确保检查命令提示符的前面,因为它将全部一起平滑。

标签: pascal file-handling freepascal


【解决方案1】:

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

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

在 Windows 10 上编译和运行良好,您可以确认它确实如此 通过使用记事本打开文件。它使用内置的Text 文件类型,该文件类型专门用于 用于处理 .Txt 文件

谈到你的程序,起初我以为你的问题只是你不是 指定应该保存文件的路径,所以我建议更改您的Assign 声明阅读

assign(f, 'C:\Temp\Hey.Txt');

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

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

。错误的原因是我的 Lazarus 的 默认编译器设置,字符串是所谓的“巨大字符串”,最大可达 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:\temp\hey.txt');
    rewrite(f);
    h := 'jmhtdjh';
    write(f,h);
    close(f);
    readkey;
end.

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

坦率地说,不值得花任何时间尝试“修复”这个问题,只需使用 而是提供了text 文件类型。

【讨论】:

  • 在控制台应用中,有时你真的不想指定完整路径
  • @DavidHeffernan:谢谢。我个人不记得有什么理由不这样做,但我相信你是对的,所以我做了一些改变。
  • 有大量的例子。几乎所有接受文件名作为参数的控制台应用程序。如果您曾经使用过这样的工具,而且我相信您曾经使用过,那么您将只是输入了没有路径的文件名。
  • @DavidHeffernan:哦,好吧,我明白你的意思了。
  • @huckdupr “不起作用”是对问题的糟糕描述。文件是否创建?文件的大小(以字节为单位)?如果文件大小> 0,当您在十六进制编辑器中查看它时它包含什么?您收到任何错误消息吗?如您所见,有很多细节可能会更清楚地说明实际问题,而不是枯燥的“不起作用”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多