2013-08-05 5 views
6

サードパーティプログラムによって定期的に書き込まれているファイルを読み込んでいます。サードパーティプログラムでIOExceptionを発生させずにファイルを読み取る

using (FileStream fs = new FileStream(
         FullPath, 
         FileMode.Open, 
         FileAccess.Read, 
         FileShare.ReadWrite)) 

サードパーティ製のプログラムがファイルに書き込みを行っているが、時にサードパーティ製のプログラムを読み込むために、私は開いているファイルを持っているので、たまにFileShare.None

を使用しているしかし、下記のFileStreamを使用して イム読み取り排他アクセスでファイルを開こうとしますが失敗します。

サードパーティのプログラムで問題を起こすことなくこのファイルを読むにはどうすればよいですか? 別のアプリケーションを優先するために私の読書を解放しても構いません。これを行う方法は?

+0

一時的な場所にコピーしてそこから読み取ろうとしましたか?私が行うことは、通常、ファイルを使用しようとするとfalseを返す関数を作成することですが、そうでなければtrueを返し、ファイルをコピーして、それを使用できる場所に移動しようとします。プロダクションファイルを使って作業することは、特に混在している2つのプロセスでは危険な可能性があります。 – Bearcat9425

+0

File.CopyはバックグラウンドでFileStreamを実行するだけです。問題は私が読んでロックしようとするときではない。そのファイルにアクセスすると、第三者のプログラムは排他的アクセスを得ようとしますが、私はそれを開いているために傾けません。 – CathalMF

+0

ファイルを一時的な場所にコピーし、プログラムがその一時ファイルを使用するようにして、元のファイルが使用されていないようにして、サードパーティのプログラムが問題なくアクセスできるようにするとどうなりますか?それが意味をなさない場合:D – aladd04

答えて

1

あなたがしたいことは、プロセス作成通知を監視し、特定のプロセスが存在することがわかったら、途中で脱出したいことです。ここで

IWbemServices::ExecNotificationQuery

MSDNのオフいくつかのいくつかの追加の詳細です。 CodeProjectもあります:Process Information and Notifications using WMI

+0

残念ながら、他のプロセスはサービスなので、常に実行されています。 – CathalMF

1

このサードパーティ製のプロキシ(.exe、Windowsサービス、Webアプリケーションなど)が停止すると、そのときにファイルにアクセスできます。あなたがサーバーの電源を入れるとすぐにこのファイルをコピーすることができます。

これはあなたのアプリの性質と他のものの性質、およびこのファイルを読む必要がある頻度に依存して有効です。

+0

それは決して止まらない。 – CathalMF

+0

おそらく、このサービスには、ファイル内の情報と同じ情報を得るためのパブリックメソッドがあります。 –

1

私はそれを使用していませんが、他のソフトウェアによって現在ロックされていないファイルの一部をストリームするのに役立つようにSystem.IO.Filestream.Unlockメソッドを試してみましたか?私は、他のソフトウェアがファイル全体をロックしていないと仮定します。

関連する問題