我需要用包含当前日期的文件名编写一个文件..除了日期之外一切正常,它给出了一个类异常'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);
答案 0 :(得分:7)
DateToStr()将返回根据区域设置格式化的日期。在您的情况下,这几乎肯定会返回导致问题(未找到路径)的文件夹/路径分隔符(/
或\
)。
即使您更改区域设置以避免使用此类字符,如果这些区域设置不兼容",代码仍将在其他系统上失败。为避免这种情况,您需要确保文件名中日期的编码对此类潜在问题不敏感。
您可以在形成文件名后删除/替换任何此类字符,或者您可以以不会引入此类字符的方式显式编码日期,类似于:
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);