• ベストアンサー

ファィルの削除直後に作成したファィルにデータが書き込まれません。

配列@arryの要素にデータが入っているとします。 (1)最初に「data.txt」が存在していない場合 open(out,">>data.txt"); foreach(@arry { print out "$_\n"; }; close(out); で、配列のデータは書き込まれます。 (2)最初に「data.txt」が存在している場合 unlink "data.txt"; open(out,">>data.txt"); foreach(@arry) { print out "$_\n"; }; close(out); }; close(FILE); これだと、「data.txt」は作成されますが、 空のファイルで、データは書き込まれません。 unlink "data.txt";以降がない場合は、確実に ファィルは削除されたままです。 一度削除後にデータを書き出したいのですが、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

私の環境では(1)でも(2)でも正常に配列が追加されますが・・・ ((1)の@arryの右の閉じ括弧がないのは眼をつぶる) (2)は変な文字もありますが、余計な処理をしてませんか? まぁ、普通に答えるのならば、 open(out,">data.txt"); foreach(@arry) { print out "$_\n"; }; close(out); とすればいいと思いますが。 open(out,">data.txt"); で呼び出せばファイルの内容を削除して書き込みます。 あと、foreachの閉じ括弧に「;」はいりませんよ。 別にエラーにはなりませんが。

miracle2006
質問者

お礼

早速のお答えありがとうございます。 最初、「書き換え」モードでファイルをOPENしていました。 その場合、空のファイルには、配列のデータが書き出され、 あらかじめ、データが入っていた場合には、空になってしまったので、 一度、削除することを考えました。 これは、大きなプログラムの一部なので、再度、小さなプログラムで テストしてから再度質問させていただきます。

その他の回答 (1)

回答No.2

事情がよく分かりませんが、単に今までの内容を消して新たにファイルを作りたいだけなら open(out, '> data.txt') ではいけませんか? (">>" ではなくて ">" を使うということです)。ファイルが消えている瞬間がないとまずいということでしょうか? それとちょっと気になるのですが、(2) の foreach の閉じ中括弧の後の close(FILE) ってなんでしょうか? 上の方でopenしている何かだとは思いますが、これのせいで最終的に0バイトのファイルになっているという可能性はないですか?

miracle2006
質問者

お礼

早速のお答えありがとうございます。 確かに変な部分もあります。 これは、大きなプログラムの一部なので、再度、小さなプログラムで テストしてから、再度質問させていただきます。

関連するQ&A