Windows 7 + Active perlで何か書き込んでいる時にアップデートなどでPCを再起動すると、書き込んでいるテキストファイル(1KB~10MB程度)が壊れることがある様な気がします。あまり再現性が無くこれとは限らないのですが、時々真っ白のファイルができています。
かといって、全てのperlプログラムが書き込み状態にあるか否かを把握するのも面倒です。そもそも、条件に応じて書き込みしているため不定期でいつ書き込んでいるかもよく分かりません。
個人利用のため、その時に取得したデータが少し壊れる程度は諦めが付くのですが、大量に蓄積したデータまで破損するのは辛く避けたいです。
できれば簡易な方法でファイルが壊れないようにする方法はありますか?
殆ど使ったことが無くこういった雑な使い方でも良いのか分かりませんがSQLなど使うと良いのでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
・Perlで出力命令を実行した( print 等を実行した)
ということと
・実際にファイルにデータが書き込まれる
ということは、必ずしも一致しません。
ディスクへのアクセスは、コンピュータ内部のアクセス(メモリ等)に比べて、桁違いに時間がかかります。
そのため、その時間を有効に使うために、いろんな工夫をしています。
例えば、毎回書き込まずに内容をメモリに保存しておいて、後でまとめて書き込む、等。
通常、プログラムが正常に動作すると、ファイルへの書き込みも正常に完了します。
ですが、シャットダウンのような強制終了になると、ファイルの書き込みが完了しないこともあります。
管理情報の書き込みにしっぱいして、ファイルサイズが0になることも有り得るでしょう。
対策は、そのような自体でもファイル保存が完了するようにすることです。
○ UNIX系OSでは、trap を使って強制終了を検知する、というのがあります。
Windowsではどうなるか、確認していません
○ファイルを小まめの open/ close したり flush することで、ファイルに強制的に書き込む
○データベースや、Windowsのログサービス等、確実に保存されるようなものを使う
回答いただきありがとうございます。
Unixなどレンタルサーバ以外ではお目にかからないのですが、その割にWindowsの情報が無く困っています。Perl動作中に右上の×をクリックしたら多分ダメですよね・・・
あまりこまめにすると、たくさんのプログラムが同時に動いている場合、再起動のタイミングで比かかる可能性が高くなり、これはあまり良くないと思っています。かといって、メモリを使う方法についても立ち上げソフトが増えるとやはり再起動で消失する可能性が高くなりますしなやむところです。
データベースを使うもの(MySQLなど)であれば、仮に書き込み中に、Windowsを再起動しても大丈夫なのでしょうか?
No.3
- 回答日時:
perlからは一時ファイルに書き込みを行い、書き込みが終わった時点で本ファイルを削除→一時ファイルをリネームなど
回答いただきありがとうございます。
そう言えば、昔掲示板を作っていた頃、こういった方法をやっていました。クライアントどうさせる場合にも有効そうですね。
No.1
- 回答日時:
HDD交換してはどうか?
今のHDDは外部ユニットを組んで新しいHDDに必要ファイルを移してから
フォーマット。再利用。で良いと思うのだが?(^。^)y-.。o○
写真の複合機はエプソンが8年目くらいに止まる様にしてあるそうだ。
先代の複合機も8年くらいで使えなくなった。
詐欺会社エプソン!(-_-)/~~~ピシー!ピシー!
気に入らないのでキャノンの一番安いプリンターにした。
始めはコンビニのマルチコピーでプリンターとスキャナー代わりをしようとしたのだが
上手く行かずスキャナーだけの利用となった。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- ノートパソコン ハードディスクが壊れたPCのオークションへの出品の仕方を教えてください 9 2022/11/16 08:13
- USBメモリー・SDカード・フラッシュメモリー microSDカードに追記出来ない 9 2023/06/18 17:19
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- ドライブ・ストレージ 【緊急】USBメモリから変な音がする 6 2022/05/20 15:52
- Windows 10 再起動後 Pinが使用できず、PC(windows11)にサインインできない 3 2022/08/30 20:53
- ドライブ・ストレージ QNAPのNAS RAID1が崩壊 2 2023/08/05 23:54
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- その他(AV機器・カメラ) GoPro動画をPC版Quikで再生できない 1 2022/05/14 21:04
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
ファイルロックの解除方法
-
Cookieが保存できない。
-
unixでのファイルロックの方法...
-
awkスクリプトでダブルクォーテ...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
JSP URLに表示される拡張子 .jsp
-
window.open でのファイル指定方法
-
バッチファイルの作り方(CSV→...
-
エクセルVBAで素数だけを出力す...
-
LinuxのC言語で、ファイル名の...
-
VBAコードを張り付け後のエクセ...
-
無料配布の郵便番号自動入力cgi...
-
タブの色を変更する方法
-
Perl Vlookupみたいに
-
CSVファイルについて
-
重複するデータを抽出できる秀...
-
ExcelをCSV書き出す場合のシー...
-
foreachの制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
unixでのファイルロックの方法...
-
1行がやたら長いテキストをバッ...
-
VBでファイル分割の方法
-
ファイルの結合
-
ファイルがオープンできない
-
【PHP】アクセス過多でファ...
-
ファイルディスクリプタとは?
-
ファイルの存在確認をしたい
-
printscreenについて。
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
window.open でのファイル指定方法
おすすめ情報