• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルオープンの挙動)

ファイルオープンの挙動

このQ&Aのポイント
  • Windows環境とLinux環境でのファイルオープンの挙動に違いがある
  • Windows環境ではファイルの読み取りと書き込みがうまくできない
  • Linux環境ではファイルの読み取りと書き込みが正常に行われる

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

+> は、入出力共用ではありますが上書き用途です。 既にファイルが存在した場合、+> で開いた時点で0バイトのファイルになります。 +> は、「書いてから読む」向けです。 serchさんが希望する動作をさせるには +< を使います。 が、その場合以下のように書いたのでは正しく動作しません。(なお、ここではHTMLではなくプレーンテキストで吐かせてます) print "Content-type: text/plain\n\n"; open(FILE, "+< sample.txt"); $data = <FILE>; print "data = $data\n"; $flag = print FILE "TEST MESSAGE"; print "flag = $flag\n"; close(FILE); この状態だと、最終的なsample.txtの中身は以下のようになります。 実験ですTEST MESSAGE つまり、元から入っていた「実験です」の続きに「TEST MESSAGE」が入ります。 そこで以下のようにします。 print "Content-type: text/plain\n\n"; open(FILE, "+< sample.txt"); $data = <FILE>; print "data = $data\n"; truncate(FILE,0); #ファイルを0バイトに切り詰め seek(FILE,0,0); #読み書きのポインタ位置をファイルの先頭に $flag = print FILE "TEST MESSAGE"; print "flag = $flag\n"; close(FILE); truncateでファイルサイズを0バイト(空)にし、seekで書き込む位置を先頭に戻してこれで予想通りの動作ができます。 但し、+< は「読んでから書く」のごとくopenする時点でファイルそのものが存在しないとエラーとなります。

noname#6323
質問者

お礼

確認できました。 迅速かつ的確なアドバイスでした。 参考にいたします。ありがとうございました。

関連するQ&A