問題タブ [file-locking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - File.Copyは、完了後にソースファイルをロックします
サーバーから.NET2.0アプリケーション(C#)のローカルマシンにファイルをコピーしようとしていますが、ソースファイルが不必要にロックされたままになっています。この動作を引き起こしているのはファイルサーバー上で構成されているものであると思われますが、何ができるかわかりません...あなたは何を助けることができますか?
ファイルコピー操作の後、ファイルサーバー(Windows 2K3 R2)は、サーバー上のファイルに対してそれ以上の操作が行われていなくても、ソースファイルが読み取りロックで保持されていることを報告します。アプリケーションが終了すると、ロックが解除されます。
以下に示す最も基本的なコードを使用しても、動作を再現できます。
ロックはラインの実行中にすぐに発生し、File.Copy()
このラインが終了した後も持続します。より複雑なアプリケーションでは、File.Copy()
出口のあるルーチンが終了すると(ただし、アプリケーションはまだ実行中です)、ロックは持続します。
アプリケーション全体が終了したときにのみ、ロックが解除されます。
sourceFile
UNCパスの代わりにマップされたドライブを使用するように変更しても、動作に違いはありません。
この動作は、ソースファイルが別のサーバーにある場合、またはローカルにある場合には発生しません。
の後に次の行を追加するFile.Copy
と、ロックはすぐに解放されます。
これはすべて、この動作を引き起こしているサーバー上に何かがあるかのように聞こえます。サーバーには、McAfeeアンチウイルスとともにShadowProtectがインストールされています。それを除けば、WindowsServerとそのコンポーネントの上に何もインストールされていないように見えます。
また、ファイルに読み取り権限を要求することで問題が解決する理由もわかりません。
これらの質問にお答えいただければ幸いです。
- ファイルロックが持続する原因は何ですか?
- 読み取り許可を要求すると問題が解決するのはなぜですか?
delphi - ログ ファイル モニター
別のアプリケーションがファイルを更新している間に、ロックの競合が発生しないように、テキスト ファイルを開いて内容を読み取ることはできますか?
イベントが発生するたびに別のアプリケーションによって更新される、あるアプリケーションのログ ファイルを監視する必要があります。
ファイルを読み取ろうとする前に、ファイルが使用中かどうかを確認しますが、すべての場合に機能するとは限りません。
ありがとう、ピーター
.net - 余分なプロセス ファイル ロック
プロセスの境界を越えてファイルをロックおよびロック解除できるようにする必要がある .NET システムがあります。私が使用する予定のモデルは次のとおりです。
- ユーザーがロック トークンを生成する
- トークンを使用してファイルをロックし、トークンを更新します
- 必要に応じて #2 で繰り返します
- トークンを解放してすべてのファイルのロックを解除します
- ユーザーが一定時間内にトークンの更新に失敗した場合、#4 が自動的に発生します
各ステップは、異なるプロセスから実行できます。
問題は 2 つあります。これは合理的なモデルであり、それを実装するためのすぐに利用できるツールはありますか? これが OS で直接実行できない場合は、.file
s などを使用したアドバイザリ ロックのようなものを考えています。
編集:このモードは非排他的な読み取りロックを取得しますが、他のモードは排他的な書き込みロックを取得できますが、それらを取得した同じプロセスによって常に解放されます。
c# - ファイルが使用中かどうかを確認する方法はありますか?
1 つの画像ファイルに繰り返しアクセスする必要があるプログラムを C# で作成しています。ほとんどの場合は機能しますが、コンピューターが高速で実行されている場合、ファイルシステムに保存される前にファイルにアクセスしようとし、エラーをスローします。
「別のプロセスで使用中のファイル」
これを回避する方法を見つけたいのですが、私のグーグル検索では、例外処理を使用してチェックを作成するだけで済みました。これは私の宗教に反するので、誰かがそれを行うためのより良い方法があるかどうか疑問に思っていましたか?
sqlite - Mac ネットワーク上の SQLite での「データベースがロックされています」エラー
SQLite (実際には PySQLite) を使用して単純なデータベースを作成しました。ローカル マシン (つまり、Windows マシン ドライブ上のプログラムとデータベース ファイル) からデータベースにクエリを実行したり、データベースに書き込んだりすると、問題なく動作します。ただし、データベース ファイルをネットワーク ドライブ (タイム カプセル) にコピーすると、Windows マシンはファイルを表示でき、ドライブへの完全な読み取り/書き込みアクセス権を持っていますが、「SQL エラー: データベースがロックされています」というメッセージが表示されます。単純な選択を実行するとき!
クエリは、Mac からネットワーク経由で正常に動作します。
派手なマルチアクセスは行われていません - 1 台のマシンだけがデータベースを開いています。奇妙な Mac ネットワークの問題のようです。Python プログラムまたは SQLite3 コマンド ラインで発生します。SQLite 3.6.14.2 を使用しています。
誰もこの問題を見ましたか?それを修正する方法はありますか?これは単純なシングル ユーザー プログラムであるため、MYSQL を使いこなしたくありませんが、複数のマシンから使用したいと考えています。
ありがとう。
.net - 「アセンブリ煉獄」ではどうなりますか?
.NETアセンブリがGACに展開され、宛先ファイルがロックされている場合、Windowsは、ある種の「アセンブリの煉獄」であると私が最も推測できる範囲でそれを保持しますc:\windows\assembly\temp
。
Process Explorerを使用すると、疑わしいDLLを検索するときにこれらを簡単に確認できます。
(出典:alexangas.com)
ファイル(この場合はOWSTIMER.EXE)をロックするプロセスを終了するとすぐに、ファイルは魔法のようにGACに正しく展開されます。
ここでWindowsが実際に何をしているのか知りたいです。ファイルロックが解除されたことをどのようにして知ることができますか?ロックされたファイルの記録はどこに保存されますか?あきらめたことはありますか?
multithreading - 名前付き System V セマフォを正しく破棄する
名前付き System V セマフォを使用して、OSX および Linux 上のすべてのアプリでファイルをロックしています。どの定義から見ても、最も美しい API ではありません。
動作しているように見えますが、全員がセマフォを使い終わった後、セマフォを適切に破棄する方法がわかりません。
一般的なロジックは次のようになります。
作成:
[1] スレッドまたはプロセスは、ftok() によってファイル用に作成された key_t で設定されたセマフォを開こうとします。セットには 2 つのセマフォが含まれています。[2] セマフォ セットが存在しない場合は、666 パーミッションで作成されます。[3] 「ロック」(セマフォの 1 つ) が解放状態 (値 1) に設定されます。[4] 「参照カウント」(同じセット内の別のセマフォ) がインクリメントされます。
ロック/ロック解除:
[5] をロックするには、スレッドは「ロック」セマフォの値を 1 減らします (元に戻す機能を使用)。したがって、値が既にゼロである場合は待機します。[6] のロックを解除するために、スレッドはそれを 1 つ増やし、他の誰かがロックできるようにします。
破壊:
[7] 「参照カウント」セマフォをデクリメントしようとしています (IPC_NOWAIT フラグを使用)。[8] その値が 0 であることを確認し、[9] セマフォ セットが破棄されます。
(1 つのスレッド内でロックを再帰的にするための、スレッド ローカル ストレージに基づくロジックのレイヤーもあります。)
質問は次のとおりです。
- 手順 [1] と [2] を同期するにはどうすればよいですか? (セマフォ セットが存在しない場合、星を数えている間に他の誰かによって作成されたため、作成も失敗します)
- ステップ [4] を [8] と同期させて、[9] で早死にさせないようにするにはどうすればよいですか?
- 他の競合条件はありますか?
PS: POSIX セマフォにはより優れた API がありますが、ここで説明されているように sem_inlink() の動作を乗り切ることはできないと思います。
セマフォを再作成または再接続するための sem_open() の呼び出しは、 sem_unlink() が呼び出された後に新しいセマフォを参照します。
だから私は彼らを解放する方法がありません...
windows - 他のリソースがファイルを使用しているときにアクセスがファイルをコピーできないようにする
私のアプリケーションでは、ディレクトリ内のビデオファイルを変換するexeファイルが1つあり、ディレクトリ内にあるファイルを別のサーバーに転送するためにcute ftpを使用しました。
CUTE FTP は、毎分実行されるように構成されています。
ビデオファイルのジョブの 25% が終了すると、CUTEFTP はそのファイルを別のサーバーに転送します。
この問題を解決する方法は何ですか。