FreePascal / Lazarus:为什么看到二进制文件的内容?

时间:2014-06-05 06:36:49

标签: lazarus

我正在使用这种记录格式的打字文件:

  KClientServerConfType = Record
    HostName: String[255];
    DatabaseName: String[200];
    UserName: String[200];
    Password: String[200];
  end;  

工作正常。但是为什么我可以使用GEdit读取文件的内容?我认识到乱码中的价值观。这是正常的还是不可读?

以下是要编写的代码:

  AssignFile(ThisFile, 'clientserver.conf');
  Rewrite(ThisFile);
  Settings.HostName:= '192.168.100.100';
  Settings.DatabaseName:= 'dbESM';
  Settings.UserName:= 'itsols';
  Settings.Password:= 'pass12d3';
  Write(ThisFile, Settings);
  CloseFile(ThisFile);

我在Ubuntu 12.04上使用Lazarus。

1 个答案:

答案 0 :(得分:1)

如果FPC对短线的处理类似于Delphi,那么可能的原因是你所看到的包括每个字符串的长度字节(例如HostName [0]的值)和每个字符串的实际长度之间的随机数据字符串及其声明的长度,例如HostName [16] ... HostName [200]如果您的Settings变量是局部变量;如果它是一个局部变量,那么随机的东西就是变量之前的内存。

“该字段将根据数据进行调整”:(在Delphi中)如果您正在写入纯文本文件,但如果您使用的是“ClientServerConfType文件”,则会得到[0文件中的字节以及超出字符串动态长度的垃圾。

如果记录未声明为“已打包”,则文件中的记录字段之间可能存在额外的,可能是垃圾填充的填充。