C++ fstream は ios::out|ios::in モードで txt ファイルを開きますが、プログラムの実行中にメモ帳はファイルを変更できます。何が起こっているのでしょうか?
注: Win7 x64 の場合、アカウントは管理者です。UAC がないため、直接管理者になります。
リーリー
「OK」をクリックすると、「名前を付けて保存」ダイアログボックスが表示され、結果を上書きできます。
プログラムはまだ実行中ですが、ファイルは変更されています。
元々はsublimetextを使って直接変更することはできませんでしたが、メモ帳をいじったところsublimetextも変更できるようになりました。
プログラムの実行中に他のプログラムが特定のファイルを書き込んだり削除したりできないようにする方法を教えてください。
ありがとうございます。
我想大声告诉你2017-05-16 13:26:22
まず問題について話しましょう。メモ帳が古いファイルを上書きした後、プロセスによって開かれたファイルは前のファイルになり(前のファイルはまだ存在しますが、表示されません)、再度編集したファイルはすでに新しいファイル
Linux では、必須のロックであってもリンクを解除することで回避できるため、Linux ではこの問題を回避する方法はありません
Windows のシステム API は特定の機能を提供する必要がありますが、「このファイルはプロセスによって占有されているため削除できません」ということがよくあるので、私はよく知っていますが、この制限を回避する可能性は排除しません
高洛峰2017-05-16 13:26:22
この質問は非常に興味深いものです。トラブルシューティングの考え方は次のとおりです。
エディタ -- システム バッファ --- エンティティ ファイル
(コードは読み取りおよび書き込み可能な方法でファイルを開き、関連付けを確立していますが、読み取りのみを使用しているようです。読み取りロックは排他的ではないようです)