DeleteFileについて


yuka  2008-07-27 03:04:30  No: 31365  IP: [192.*.*.*]

DeleteFileで困っています。
CSV出力でテキストを削除してから出力していますが、
2回目以降は削除されずにCSVが追加になってしまします。
一旦プログラムを終わらせて再開すればテキストは削除されます。
2回目以降をする前になんらかの処理がいるのでしょうか。

編集    削除
どんなコード?  2008-07-27 03:29:59  No: 31366  IP: [192.*.*.*]

CSV出力をどんなコードでやってるのかが分からないと回答しようがないかな?
ファイル名が同じなら削除せずに上書きする方法もあると思うけど。

編集    削除
KHE00221  2008-07-27 03:40:46  No: 31367  IP: [192.*.*.*]

CSVファイルを開いたまま削除しようとして失敗しているだけ
のような気がするけど?

編集    削除
yuka  2008-07-27 05:45:08  No: 31368  IP: [192.*.*.*]

回答ありがとうございます。
>ファイル名が同じなら削除せずに上書きする方法もあると思うけど。
deleteしなくても上書きすると思っていました。
でも連続で同じ処理をするとダブルので、deleteロジックを入れました。
結果は同じで・・・
何か方法があれば教えて下さい。

>CSVファイルを開いたまま削除しようとして失敗しているだけ
何度も検証しているのでそれはありません。
オープンの場合は別のエラーがでます。

deleteのテキストが日本語(備品.csv)なのが問題かも。
ソースを記述します。

// 初期処理
FileName := EdPass.Text;
DeleteFile(FileName);

with DM do begin
  //ローカルテキスト出力
  CDS01.Close;
  CDS01.PrePare;
  CDS01.Params.ParamByName('key').AsString   := '01';
  CDS01.Open;
  AssignFile( stf, FileName );
  Rewrite( stf );
  while not CDS01.Eof do begin
    Writeln( stf, CDS01.FieldByName('REC').AsString );
    Application.ProcessMessages;
    CDS01.Next;
  end;
  CDS01.Close;
  Flush(stf);
  CloseFile( stf );
end;

編集    削除
ttt  2008-07-27 21:09:56  No: 31369  IP: [192.*.*.*]

Rewriteの説明によると
> 同じ名前の外部ファイルがすでに存在する場合,そのファイルは削除され,かわりに新しい空のファイルが作成されます。
> F がすでに開かれている場合には,いったん閉じてから再作成されます。現在のファイル位置は空のファイルの先頭に設定されます。
なので、自分で消そうが消すまいが新規作成されるはずだね。おかしいね。

考えられるのは2つ。
(1) 元のデータが2重になっている(CDS01ってのが何者かわからんけど)
(2) ProcessMessagesが悪さをしている
(同じイベントに再入してもRewriteしてるから追加にはならないはずだけど、どこか別のイベントで追加書き込みしてるかもしれない)

> deleteのテキストが日本語(備品.csv)なのが問題かも。
そう思うのなら日本語以外で試してみてはどうでしょう。
おそらく関係ないとは思うけど、問題の切り分けにはなるでしょ?

編集    削除
KHE00221  2008-07-27 23:18:19  No: 31370  IP: [192.*.*.*]

CSVデータ自体が2重に作成されてたりしないかな?

編集    削除