[解決済み] .NETでファイルのロックが解除されるまで待つ
2022-11-01 13:14:52
質問
ファイルがロック解除され、読み取りと名前の変更が可能になるまで、スレッドをブロックする最も簡単な方法は何ですか? たとえば、.NET Framework のどこかに WaitOnFile() があるのでしょうか?
FileSystemWatcher を使用して、FTP サイトに転送されるファイルを探すサービスがありますが ファイルが作成されました。 イベントは、他のプロセスがファイルの書き込みを完了する前に発生します。
理想的なソリューションは、スレッドがあきらめる前に永遠にハングアップしないように、タイムアウト期間を設けることです。
編集: 以下の解決策をいくつか試した後、私は最終的に
システム
に書き込むようにしました。
Path.GetTempFileName()
に書き込むようにし、次に
File.Move()
を実行し、最終地点へ。と同時に
FileSystemWatcher
イベントが発生した時点で、ファイルはすでに完成していました。
どのように解決するのですか?
これは、私が 関連の質問 :
/// <summary>
/// Blocks until the file is not locked any more.
/// </summary>
/// <param name="fullPath"></param>
bool WaitForFile(string fullPath)
{
int numTries = 0;
while (true)
{
++numTries;
try
{
// Attempt to open the file exclusively.
using (FileStream fs = new FileStream(fullPath,
FileMode.Open, FileAccess.ReadWrite,
FileShare.None, 100))
{
fs.ReadByte();
// If we got this far the file is ready
break;
}
}
catch (Exception ex)
{
Log.LogWarning(
"WaitForFile {0} failed to get an exclusive lock: {1}",
fullPath, ex.ToString());
if (numTries > 10)
{
Log.LogWarning(
"WaitForFile {0} giving up after 10 tries",
fullPath);
return false;
}
// Wait for the lock to be released
System.Threading.Thread.Sleep(500);
}
}
Log.LogTrace("WaitForFile {0} returning true after {1} tries",
fullPath, numTries);
return true;
}
関連
-
[解決済み】XAMLにSystem.Stringを埋め込む
-
[解決済み] パッケージのダウングレード警告を検出(dotnet core, vs 2017)
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Gitで1つのファイルの作業コピーの変更を元に戻す?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] ファイルの作成日時、変更日時を取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] COMExceptionエラー80040154を修復する方法は?
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] リファレンスの追加にSystem.Web.Mvcが表示されないのはなぜですか?
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] .net の OOM 問題を解決する必要があります。
-
[解決済み] WCFのデバッグ時にサーバーに自動的に踏み込むことができない
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
-
[解決済み] MemoryStreamから文字列を取得する方法は?