2016-08-12 5 views
0

파일을 열고 추가 할 프로그램이 있습니다. 두 개의 응용 프로그램을 실행해야하는 경우 다른 프로세스에서 사용하는 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가 해결책입니다. SAM은 좋은 대답을 제공했습니다. –

답변

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에서 검색한다면 정확히 똑같은 코드가 기사의 1000에서 사용된다는 것을 알게 될 것이다. .. 그럼 누가 주인 이니? 제공 한 링크가 어딘가에서 복사 한 다른 사용자입니까? 무의미하고 논란의 여지가있는 토론, 미안. – sam