Delphi6です。アプリケーション中でログを書き出す手続きを作ったのですが、
Windows98では問題無く動作するのに、Me以降のOSだとファイルが無い場合に
新規作成されず、不正なファイル名と言われてしまいます。
procedure TForm1.LogPrint(LOG: string;);
var
f: TextFile;
ymd: string;
begin
// ymd :ファイルネーム[年月日.txt]
ymd := Copy(DateTimeToStr(now), 1, 8);
Delete(ymd, 3, 1);
Delete(ymd, 5, 1);
// ファイルがあれば最下行に追加、無ければ先頭から(ファイル作成)
AssignFile(f, FolderPath + ymd + '.txt');
if FileExists(FolderPath + ymd + '.txt') then
Append(f) // 問題なく動作
else
ReWrite(f); // エラー(不正なファイル名です)
Writeln(f, LOG);
CloseFile(f);
end;
問題点、又はエラー回避法が分かる方、教えて下さい。
>ymd := Copy(DateTimeToStr(now), 1, 8);
では、Windows2000では
“2006/03/”
が格納されます。
Delete(ymd, 3, 1);
Delete(ymd, 5, 1);
実行後にはymdには
“206/3/”
が格納されます。
“/”は、ファイル名に使用できません。
WindowsMe以降では、
コントロールパネル - 地域のオプション - 「日付」タブ
短い形式欄がデフォルトでyyyy/MM/ddになっているのかもしれないですね。
ShortDateFormat := yy/MM/dd'; // 06/04-01 西暦2桁
ShortDateFormat := yyyy/MM/dd'; // 2006/04-01 西暦4桁
別の方法で、日付を取り出すには、こんな感じで。
procedure TForm1.Button2Click(Sender: TObject);
var
ymd: String;
Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
ymd := Format('%.4d%.2d%.2d', [Year, Month, Day]);
MessageDlg(ymd, mtInformation, [mbOk], 0);
end;
なるほど、難しく考えすぎていました。
だからMe(2000年)以降のOSがダメなんですね。
igyさん、お気に召すままさん、ありがとうございます!
ツイート | ![]() |