- ベストアンサー
ファィルの削除直後に作成したファィルにデータが書き込まれません。
配列@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";以降がない場合は、確実に ファィルは削除されたままです。 一度削除後にデータを書き出したいのですが、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私の環境では(1)でも(2)でも正常に配列が追加されますが・・・ ((1)の@arryの右の閉じ括弧がないのは眼をつぶる) (2)は変な文字もありますが、余計な処理をしてませんか? まぁ、普通に答えるのならば、 open(out,">data.txt"); foreach(@arry) { print out "$_\n"; }; close(out); とすればいいと思いますが。 open(out,">data.txt"); で呼び出せばファイルの内容を削除して書き込みます。 あと、foreachの閉じ括弧に「;」はいりませんよ。 別にエラーにはなりませんが。
その他の回答 (1)
- noboru2000
- ベストアンサー率33% (47/140)
事情がよく分かりませんが、単に今までの内容を消して新たにファイルを作りたいだけなら open(out, '> data.txt') ではいけませんか? (">>" ではなくて ">" を使うということです)。ファイルが消えている瞬間がないとまずいということでしょうか? それとちょっと気になるのですが、(2) の foreach の閉じ中括弧の後の close(FILE) ってなんでしょうか? 上の方でopenしている何かだとは思いますが、これのせいで最終的に0バイトのファイルになっているという可能性はないですか?
お礼
早速のお答えありがとうございます。 確かに変な部分もあります。 これは、大きなプログラムの一部なので、再度、小さなプログラムで テストしてから、再度質問させていただきます。
お礼
早速のお答えありがとうございます。 最初、「書き換え」モードでファイルをOPENしていました。 その場合、空のファイルには、配列のデータが書き出され、 あらかじめ、データが入っていた場合には、空になってしまったので、 一度、削除することを考えました。 これは、大きなプログラムの一部なので、再度、小さなプログラムで テストしてから再度質問させていただきます。