lazarus/pascal 用当前日期写入文件名

lazarus/pascal write filename with current date

我需要用包含当前日期的文件名编写一个文件。除了日期之外一切正常,它给出了一个 class 异常 'run error(3)'

(importo.text 是 TEdit 的文本..但我想这无关紧要)

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

...

var
  contributo:real;
  f:textfile;
...
  datee: string;

...

contributo:= (StrToInt(importo.text)/ 100)*4;

  datee:= DateToStr(Date);

  assignfile(f,'fattura minimi n.'+n.text+' '+datee+'.txt');
  rewrite(f);

  writeln(f,'Giovanna Migliore');
  ...

  closefile(f);

DateToStr() 将 return 根据区域设置格式化日期。在你的情况下,这几乎肯定是 returning 一个 folder/path 分隔符(/\)导致了问题(找不到路径)。

即使您更改区域设置以避免使用此类字符,如果这些区域设置不是 "compatible",代码在其他系统上仍会失败。为避免这种情况,您需要确保文件名中的日期编码对此类潜在问题不敏感。

您可以在形成文件名后 remove/replace 任何此类字符,或者您可以以不会引入此类字符开头的方式显式编码日期,类似于:

var
  y, m, d: Word;

..

  DecodeDate(Date, y, m, d);
  dateStr := Format('%4d-%2d-%2d', [y, m, d]);

  // e.g. dateStr value for 31st Dec 2016 would be:  '2016-12-31'

然后您可以根据需要通过串联或直接在单个格式语句中将日期组件值合并到文件名中:

 filename := Format('fattura minimi n.%s %4d-%2d-%2d.txt [n.text, y, m, d]);
 assignfile(f, filename);