2010-11-30 2 views
1

お客様は、log4netを使用しているASP.NETアプリケーションのクイックで汚れたログビューアを求めました。アクティブなファイルの末尾を読み取り、それを吐き返すコントローラ。アクティブなログファイルを閲覧するためのWindowsでのファイルアクセス保護の読み取り専用

標準の.NET API(File.OpenTextなど)を使用すると、アクセス違反(別のプロセスで開くファイル)が発生しますが、これは私が期待しているものですが、Ultraedit読み取り専用で表示するために開きます。 .NET APIから同じことをすることはできますか?

using(StreamReader infile = 
     System.IO.File.OpenText(Request.PhysicalApplicationPath + @"\log\my.log")) 
{ 
} 
+0

「別のプロセスで使用中」の例外が発生してもファイルを読み取るにはどうすればよいですか?](http://stackoverflow.com/questions/4400517/how-can-i-read-a-あなたが別のプロセス例外によってファイルを取得しようとしている場合) – Rob

答えて

5

は、ファイルの読み込み/書き込みの共有を許可することを指定し、File.OpenTextと同じ動作を得るためにあなたのストリーム上のStreamReaderを置きます。

using(Stream stream = File.Open(@"x:\path\file.log", 
     FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using(StreamReader sr = new StreamReader(stream)) 
    { 
     //read content 
    } 
} 

UltraEditでファイルを開くことができるので、log4netはファイルに排他ロックをかけていないと仮定します。

+0

しかし、log4netが作成するファイルを開きたいとします。 ultraeditはそれを読み取ることができるので、ファイルはlog4netによって排他ロックされていないので、FileShareパラメータを指定して.Netでアクセスすることができます。あなたのasp.netプロセスが実際のファイルへのアクセス権を持っていない可能性もあります。 –

+0

基本的なOpenReadやOpenTextを使っていない場所でうまくいきました! – codenheim

+0

"ultraeditはそれを読むことができるので、ファイルは排他ロックの対象にはなりません" - そうです、私はそれほど知っていましたが、OpenReadとOpenTextは同様のアクセスモードを使用すると仮定しました。 – codenheim

-2

あなたがしようとしました:

 using (FileStream fs = File.OpenRead("C:\\1.txt")) 
     { 
      //read here 
     } 
関連する問題