- ベストアンサー
ファイルopenについて
1----------------------------------- open(IN,">$past_file")|| &error; @lines2=<IN>; close(IN); >は書き込みopenということですが、この使い方で一応読み込みはできます。しかしやはり使い方としては間違っているのでしょうか?OSによってはできないとか・・ というのも、ないファイルをOPENするとき、読み込みではファイルはopenできませんよね。書き込みでopenすれば、ないファイルを自動で作成してくれます。今作っている掲示板だとこれは都合がいいので、こういう風に記述したいのですがだめでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 open FILE, "+>$data"; を指定した場合は、 読み書き用のオープンとなります。 なおかつ、ファイルが存在しない場合は、新規作成します。 既に、ファイルが存在する場合は、そのファイルの内容は切り捨てられます。 下記のURLを参照ください。
その他の回答 (4)
- HOGERA23
- ベストアンサー率28% (2/7)
natsuki_tkさん(#2)も > 事前にファイルの存在を調べて、... とおっしゃっていますが、 if (-e $past_file) { # もし$past_fileがあったら open IN, $past_file or &error; @line2 = <IN>; close IN; } じゃダメですか?
- natsuki_tk
- ベストアンサー率35% (99/279)
誤解招いてしまったかもしれないので一応補足を。 >はファイル内容を開く際に消します(無ければ新規作成) +はファイル読込可に +>は、理論上読みこみもできます。 が、ファイル自体消した上で空白を読んでも仕方ないので 自分が書き込んだものを読み戻す場合が主な用途でしょう (一般的に使う機会ほとんど無いと思いますが) その意味で、最初の質問のソースの代わりには使えません。
- natsuki_tk
- ベストアンサー率35% (99/279)
">"では読み込めません。 ">"はファイルを開く際に中身が消去されます。 ですので、基本的に読み出し用には使えません。 open FILE, "+>$data"; の場合も同様です。 (下記+<のタイプミスかと思います) (ちなみに、書き出したものを再度読み込む場合に使うものです) 更新を前提とした読み込みの場合は、 open FILE, "+<$data"; を使うのが一般的です。 (ロックをかける際にもシンプルに済みますし) 残念ながらファイルが無い場合には作成してくれませんけれど。 ファイルを作成もしたい場合は、 事前にファイルの存在を調べて、 無ければ作成といったようにわけるのが早い気がします。 #sysopenという選択肢もあります。
- tatsu99
- ベストアンサー率52% (391/751)
Windows上で確認した結果では、読み込めませんでした。 そのような場合通常は、 open(IN,"+>$past_file")|| &error; のように、>の前に+をつけて読み書き用にしてオープンします。上記のようにした場合は、ファイルの内容を読み込むことが、可能です。