Pascal 免费帕斯卡罐';不要写入文本文件

Pascal 免费帕斯卡罐';不要写入文本文件,pascal,file-handling,freepascal,Pascal,File Handling,Freepascal,我试图用免费的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. 在我

我试图用免费的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:\temp\test.txt');
  Rewrite(F);
  Writeln(F, 'testing ...');
  Close(F);
  Readln;
end.
它在Windows 10上编译并运行良好,您可以确认它确实可以 通过使用记事本打开文件。它使用内置的
文本
文件类型,该文件类型专门用于 用于处理.Txt文件

谈到你的计划,一开始我认为你的问题在于你没有 指定文件应保存的路径,因此我建议更改
Assign
声明全文

assign(f, 'C:\Temp\Hey.Txt');
然而,当我试图用这个更改编译您的代码时,我得到了错误

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:\temp\hey.txt');
    rewrite(f);
    h := 'jmhtdjh';
    write(f,h);
    close(f);
    readkey;
end.
这个编译并将文件hey.txt写入c:\temp文件夹,我可以打开它 用记事本。但是,内容可能不是您所期望的,因为
jmhtdjh
前面是我提到的长度字节,即Chr(7),所以在 记事本字符串的开头看起来像一个空心矩形

坦白地说,花时间试图“修复”这个问题是不值得的,只要使用
提供了
文本
文件类型。

在控制台应用程序中,有时您确实不想指定完整的path@DavidHeffernan:谢谢。我个人不记得有什么理由不这样做,但我相信你是对的,所以我改变了一点。有大量的例子。几乎所有接受文件名作为参数的控制台应用程序。如果您曾经使用过这样的工具,而且我相信您已经使用过,那么您只需输入文件名而没有路径。@DavidFeffernan:哦,好吧,我现在明白您的意思了。@huckdupr“不工作”是一个糟糕的问题描述。文件是否已创建?文件的大小(以字节为单位)?如果文件大小>0,当您在十六进制编辑器中查看它时,它包含什么?你收到错误消息了吗?正如你所看到的,有很多细节可以让你对实际问题有更多的了解,而不是枯燥的“不起作用”@潜伏者:非常感谢潜伏者,我修复了它,但它仍然不起作用。这很奇怪。我可以编译你的程序,运行它,
hey.txt
显示在当前文件夹中,内容为“jmhtdjh”。末尾没有换行符,因此请确保检查命令提示符的前面,因为它将一起被覆盖。