(たとえば)ファイルを読み取り用に開いて閉じ、書き込み用に再度開くのではなく、ファイルを読み取りおよび書き込み用に開くことの長所と短所をカバーする議論を誰かに教えてもらえますか。私は喜びもなく詳細な情報を検索しようとしました。
どうもありがとう
それはあなたが何をしているかによります。誤ってファイルを切り捨てたり、意図せずにデータの一部を上書きしたりするのは非常に簡単であるため、読み取りおよび書き込み用に開くと、正しく一貫性を保つのが難しくなる可能性があります。
読み取りと書き込み (おそらく完全な置き換え) が実際にオプションである場合は、2 つの別々のファイルを開く方が簡単かもしれませんが、新しいファイルに書き込み、成功した場合は名前を変更して、何か (プログラミング エラーであっても!) を確認することを検討してください。書き込みを中断しても、古いデータは失われません。
読み取り/書き込み用に開くことにした場合は、ドキュメントを注意深く読んで、開くときにファイルを切り詰めないようにし、シーク機能とテル機能に注意してください。バイナリ モードで開かない限り、前のテルによって返された位置をシークするために安全に渡すことしかできません。
最も妥当な理由は競合状態であることをお勧めします。
2人のユーザーが同じファイルにアクセスして編集するとします。ユーザーAはファイルを開き、読み込んで閉じます。ユーザーBは、ユーザーAが書き込みを行う前にやって来て、ファイルを読み取ります。
これで、ユーザーAがファイルを開いたままにした場合、ユーザーBはファイルにアクセスして読み取ることができませんでした。多くの場合、これは起こりうる競合状態を回避するため、望ましい動作です。ユーザーBは、ユーザーAがファイルを使用するまで、ファイルにアクセスできません。
または、ユーザーAとBがファイル内の何も書き換えず、ファイルに追加するだけで、その順序は重要ではないと仮定します(ロギングはこの良い例です)。この場合、ユーザーAが現在何をしているかに関心がない可能性があるため、ユーザーAが書き込む前にユーザーBにファイルへのアクセスを許可することは理にかなっています。
明らかに、どちらの場合も競合状態をどのように処理したいかに関係しているので、最初にその問題について考える必要があります。通常、動作をブロックすると、競合状態がプログラムに悪影響を与えるのを防ぐため、デフォルトでその動作を使用しますが、代替手段に注意してください。
スピード。
しかし、それはあなたがしていることに依存します。
あなたがたくさんの小さなことを書くつもりなら、それを開いたままにしておく方が良いです。
大量のデータを書き込む場合は、必要なときに毎回ロードする方が(おそらく)優れています。
同じことが読書にも当てはまります。
読み取りと書き込みのためにファイルを開く場合に注意する必要があるもう 1 つのことは、読み取り操作と書き込み操作を切り替えるときにストリームをフラッシュする必要があることです。
誰も言及していないので、当然のことですが、ファイルの読み取りと書き込みを同時に行いたいからです。
さまざまなオフセットでレコードの読み取り、追加、削除、置換、インデックスの更新などを行う ISAM ファイルのようなものを考えてみましょう。ファイルを開いたり閉じたりせずに適切な場所を探すことで、はるかに簡単に実行できます!