2011-07-13 7 views
4

私はc#でファイルにアクセスしたいですが、これは別のプログラムで作成されています。
現在のところ、ファイルをWindowsエクスプローラ経由で別の場所にコピーしていて、そのコピーを使用しています。コピーが大きいので、私は元のファイルとまっすぐに作業することを好むでしょう。何か方法はありますか?
通常のFileStreamは共有アクセスモードを許可していません。私は両方のプログラムを管理しているので、必要ならばライターも変更することができます。C#でロックされたファイルにアクセスする

+3

FileStreamが共有アクセスモードを許可しないということを意味しますか?コンストラクタオーバーロードがあり、以下のように指定できます。http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx –

+0

ファイルを作成して処理しているアプリケーションが共有アクセスで開くのではない場合どちらにもできません。 – Yuck

答えて

4

あなたがプログラム書き込み用のFileStreamコンストラクタにFileShare.Readに合格する必要がありますので、書き込みや読み出しを行うプログラムは、右のファイル共有が設定されていることを確認する必要があります。

new FileStream("C:/Users/phil/tmp.txt",FileMode.Create,FileAccess.Write,FileShare.Read) 

これは、のFileStreamコンストラクタは、ファイル自体に正しいロックをかけることになります

new FileStream("C:/Users/phil/tmp.txt",FileMode.Open,FileAccess.Read,FileShare.ReadWrite) 

:また、あなたがFileShare.ReadWriteはちょうどそれを読んでいるプログラムのために有効になっていることを確認するだろう。

あなたは、MSDNのコンストラクタについての詳細を調べることができます:http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx(また、ファイル共有パラメータを取り、他のオーバーロードもあります)

0

あなたが複数のアプリケーションからファイルにアクセスするための私のライブラリを使用することができます。あなたはnugetからそれをインストールすることができます

:インストール・パッケージXabe.FileLock

をあなたはそれについての詳細な情報が必要な場合は、ファイルをロックすることができた場合にのみ https://github.com/tomaszzmuda/Xabe.FileLock

ILock fileLock = new FileLock(file); 
if(fileLock.Acquire(TimeSpan.FromSeconds(15), true)) 
{ 
    using(fileLock) 
    { 
     // file operations here 
    } 
} 

fileLock.Acquireメソッドはtrueを返しますチェックこのオブジェクト専用。 しかし、アップロードするファイルはファイルロックでも実行する必要があります。 オブジェクトにアクセスできない場合、metodはfalseを返します。

このアプリを使用するには、アプリとロックファイルの両方のパッケージをインストールしてから、データを変更してすぐにロックを解除する必要があります。

関連する問題