2015-01-13 7 views
-3

파일 시스템 감시자 솔루션을 작성했으며 추가 된 행만 추출하여 로그 파일의 변경 사항을 검색하지만 왜냐하면 프로세스가 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없다는 오류가 항상 있기 때문입니다. FileStream 파일을 고정하기 때문에,내가 카운트 할 때 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다.

using (var file = new FileStream(FileName, 
             FileMode.Open, 
             FileAccess.Read, 
             FileShare.Read)) 

     using (var sr = new StreamReader(file)) 
     { 
       try 
       { 
        Thread thread = new Thread(delegate() 
        { 
         listBox1.Invoke((MethodInvoker)(() => 
         { 

          listBox1.Items.Clear();//this is the listbox that list every added line and that I clear before of to be filled 
          string[] lines = File.ReadLines(fileName) 
               .Skip(LinecountStartPositionBUFF) 
               .Take(LinecountEndPosition - LinecountStartPositionBUFF) 
               .ToArray(); 
          listBox1.Items.AddRange(lines); 

         })); 
        }); 

        thread.Start(); 

        while (thread.IsAlive) 
         Application.DoEvents(); 
       } 

       catch 
       { } 

      return sr.ReadLine(); 
     } 
+0

더 이상 이동하기 전에 컨트롤의 이름을 변경하십시오. ('listbox1'은 ** 좋은 명명 규칙이 아닙니다 **). BTW도 빈'catch {}'블록을 사용하고 있지 않습니다. – jbutler483

+0

문제와 관련이 없지만 예외를 삼키는 것은 나쁜 습관입니다. catch 블록에 핸들을 추가하십시오. – apomene

+0

적절한 구현 방법은 [텍스트 파일의 마지막 라인 읽기] (http://stackoverflow.com/questions/11625595/read-last-line-of-text-file)를 참조하십시오. 코드에 많은 문제가 있습니다. – CodeCaster

답변

2

당신은 File.ReadLines 통해 FileStream에서 파일을 나중에 액세스를 열 수 없습니다 : 내 코드가 추가 된 라인을 검색이 인이있다. 나는 완전한 코드를 바꿀 것이다.

+0

'File.ReadLines'을 사용하지 않고 목표를 달성하는 방법에 대해 조언을 해 주시겠습니까? 고맙습니다 –