2016-08-12 10 views
0

ファイルを開いて何かを追加するプログラムがあります。 2つのアプリケーションを実行する必要がある場合、別のプロセスで使用されるIOExceptionファイルが取得されます。 Log.txtが別のプロセスで使用しているファイルをチェックする方法は?プロセスによって使用されるC#チェックファイル

class Program 
{ 
    static void Main(string[] args) 
    { 
     FileInfo file = new FileInfo(@"D:\Log.txt"); 
     using (StreamWriter sw = file.AppendText()) 
     { 
      for (int i = 0; i < 1000; i++) 
      { 
       System.Threading.Thread.Sleep(100); 
       sw.WriteLine("Hello"); 
       sw.WriteLine("And"); 
       sw.WriteLine("Welcome"); 
      } 
      Console.WriteLine("The work is done"); 
     } 
    } 
} 
+0

ファイルが別のプロセスで使用されているかどうかを確認したいのですか、それを使用しているプロセスをチェックしますか? –

+0

@VisualVincent、条件が満たされているかどうかを確認したい – A191919

+0

あなたの解決策はTry/Catchです。サムは良い答えを提供しています。 –

答えて

3

ファイルを開いて書き込もうとする必要があります。それが使用されている場合、例外が発生します。 .NETでは他の方法はありません。

protected virtual bool IsFileLocked(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 

    //file is not locked 
    return false; 
} 
+0

正しいこと:あるプロセスがファイルの読み取り/書き込みを開始できるときに、可能なテストと実際のファイルの書き込みとの間には時間差*があります。 –

+1

あなたが他の人の回答に良いフォームを使ってその投稿へのリンクを含める場合は、http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file- is-in-use – MikeT

+0

@MikeTの回答は私のものです。私が提供したコードは他の答えに使われているという事実は無関係です。なぜなら、stackoverflowやgoogleで検索すれば全く同じコードが1000sの記事に使われています。 ..だからオーナーは誰ですか?あなたが提供したリンクは、どこかからコピーした別のユーザーですか?無実で無意味な議論、申し訳ありません。 – sam

関連する問題