.txt作成エラーを回避するには?

解決


お手上げ  2006-04-01 05:23:27  No: 20769

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;

問題点、又はエラー回避法が分かる方、教えて下さい。


いgy  2006-04-01 08:18:26  No: 20770

>ymd := Copy(DateTimeToStr(now), 1, 8);
では、Windows2000では
“2006/03/”
が格納されます。
  Delete(ymd, 3, 1);
  Delete(ymd, 5, 1);
実行後にはymdには
“206/3/”
が格納されます。

“/”は、ファイル名に使用できません。


igy  2006-04-01 08:27:45  No: 20771

WindowsMe以降では、
コントロールパネル - 地域のオプション - 「日付」タブ
短い形式欄がデフォルトでyyyy/MM/ddになっているのかもしれないですね。


お気に召すまま  2006-04-01 08:33:24  No: 20772

ShortDateFormat := yy/MM/dd';    // 06/04-01   西暦2桁
ShortDateFormat := yyyy/MM/dd';  // 2006/04-01 西暦4桁


igy  2006-04-01 08:39:19  No: 20773

別の方法で、日付を取り出すには、こんな感じで。

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;


お手上げ  2006-04-02 17:08:33  No: 20774

なるほど、難しく考えすぎていました。
だからMe(2000年)以降のOSがダメなんですね。
igyさん、お気に召すままさん、ありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加