• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルに書き込めない/ファイルの内容が消える)

ファイルに書き込めない/ファイルの内容が消える

このQ&Aのポイント
  • 編集機能を掲示板に追加した結果、テキストファイルの内容が消える問題が発生しています。
  • 原因は「重複があったら置き換えるルーチン」を追加したことにより、書き込みができなくなったことです。
  • 解決策として、pushではなくunshiftを使用することで書き込みができるようになる可能性があります。

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

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

open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; として、ファイルを開いた時点で中身が消えます。 open(KEIJI,"<keijiban.dat") として開いて、データを読み込んだ後に処理をしましょう。

noname#102630
質問者

お礼

回答ありがとうございました。 そのへんを変えてみたところ内部エラーが出てしまいました。 これで書き込みモードとかのopen方法はあっていると思うのですが、どこがおかしいのかわかりません。 図ずうしいですが、もしわかったら教えてください。 open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all = <KEIJI>; # HTMLタグと衝突する記号などを変換 $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # データを1行にまとめる(項目の区切りはコロン) foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } close(KEIJI); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き   print KEIJI @all; flock(KEIJI, 8); close(KEIJI);

noname#102630
質問者

補足

ちなみに最初のOPENとCLOSEで間違っていることはわかりました。この開き方ではどうしてだめなんでしょうか?

関連するQ&A