質問
別のアプリケーションがファイルを更新している間に、ロックの競合を引き起こさないようにテキスト ファイルを開いて内容を読み取ることは可能ですか?
イベントが発生するたびに別のアプリケーションによって更新される、あるアプリケーションのログ ファイルを監視する必要があります。
ファイルを読み取ろうとする前に、ファイルが使用中かどうかを確認しますが、すべての場合に機能するとは限りません。
ありがとう、ピーター
解決
これは最初のアプリは、そのファイルを開く方法によって異なります。
ファイルを開くためにCreateFile APIを呼び出すときすなわち、(これは、0を与えた場合、それはIIRC、他のアプリケーションからアクセスすることはできません)、それを開くためにどのようにAPIを伝えるdwShareModeのparamがあります。 そうでない場合は、そのファイルからの読み込みに問題があってはなりません。 そのファイルは読み取り専用uが呼び出すことができる開かれているかどうかを確認するために、イム間違っていない場合
のようなものCreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) ;
他のヒント
- Sysinternals からプロセス モニターをダウンロードします。
- フィルター ダイアログを開き、ログ ファイルの「パス」フィルターを追加します。
- ログ書き込みアプリケーション (これを「ログライター」と呼びます) を起動します。
- ログライターが CreateFile を実行するイベントを探してクリックします。
- 「詳細」の下に「必要なアクセス:」があるはずです。汎用書き込み」。そして、「ShareMode:」が必要です。Read」に相当します。
FILE_SHARE_READ
CreateFile の呼び出し内で。これが意味するのは、「ログライターである私は、他の人に許可します。 読む 私のファイル」。 - 次に、ログ読み取りアプリケーション (「logreader」) を実行し、同じ演習を実行します。
- 詳細には「必要なアクセス:一般的な読み取り」。そして、「ShareMode:」が必要です。Read, Write」は、「ログリーダーである私は、ログライターを含む他のユーザーにログ ファイルの読み取りと書き込みを許可します」を意味します。
これらは最も合理的な値であり、ロックを防ぐことができると思います。他の組み合わせも許容される場合があります。そこには ここにテーブルがあります.
さて、「すべてのケースで機能しないように見える」場合に何が起こるかについてはまだ述べていません。次に何をすべきかは、詳細によって異なります。上記の内容で、何が問題なのかを解明するのに十分な情報が得られることを願っています。
あなたはロックの競合を取得することはありません。あなたは、一般的に提案する何をすることは問題なく動作します(これは、UNIXのは、tail -f のコマンドが何をするかだ)と、発生したそれらのマイナーなグリッチは無視することができます。私は何の問題もなく、このように働いたテ過去ログ監視アプリケーションのカップルを書いてます。
ときのイベントを取得するために FileSystemWatcher に使用してみてくださいファイルが更新されます。
より多くのデルファイ優しいリンクする
かなり離れてどのような他のプログラムの要求に応じて、できない場合があり、右に動作するようにファイル共有を得ることから、一部のプログラムがアクセス間のファイルを閉じます。
私はその後すぐに必要なデータをつかみ、それを閉じて、それを開くと、ファイルが使用可能になるのを待っている私のプログラムで過去に成功を収めています。私は、彼らは単に遅れ、決してエラーが表示されますそれを持っていながら、他のプログラムがファイルのためにしようとした場合のように、少なくともDOSで、ロックされたファイルにアクセスしようとすると、いくつかの再試行を引き起こし、そして私は、この設定を格上げ。
私が今までの事を知っている他のプログラムなしで(私が間にそれを閉じるには、のないのことを確認しました!)でも、ファイルを更新することができました。
罪として醜いが、それは仕事を得るための唯一の方法だったので、我々は他のプログラムを変更することができませんでした。それは、私がそのシステムのユーザーからののぞき見を聞いたことがない、年のために社内で展開されました。それは最終的に他のプログラムを制御機械が引退した時に去っていきました。
XpoLogがあなたのENVまたはコードを変更することなく、トリックを行います、XpoLogログモニタ
アヴァールは権利である - あなたはここに書き込みプログラムに翻弄されています。彼らはファイルをロックしている場合は、あなたが行うことができます物事のカップルがあります:
1 - <「最終更新」の日付時間のの変化を確認します/> - それが変化した場合、あなたは知っているの何かは起こった。
。2 - MOD日時は、その変更を、しなかった場合は、ファイルのコピーを作成し、チェックするために十分であるかもしれない(ファイルのサイズによって異なります)のそのの
。