문제

StreamReader는 텍스트 파일을 읽는 동안 잠금됩니다.
Streamreader가 "읽기 전용"또는 "Non Locking"모드에서 작동하도록 강요 할 수 있습니까?

내 해결 방법은 파일을 임시 위치에 복사하여 거기에서 읽는 것이지만 가능한 경우 StreamReader를 직접 사용하는 것이 좋습니다. 대체 슈지 션이 있습니까?

배경:
로그 파일에서 일부 통계를 얻기 위해 작은 앱을 작성했습니다. 이 파일은 외부 프로그램에 의해 지속적으로 업데이트되고 있습니다 (몇 차례). AAXXYY를 호출 할 수 있습니다.

출력을 검토하면 내 앱이 파일을 잠그고 Aaxxyy가 쓰는 것을 방지 할 수 있습니다.

이것이 제가하는 일입니다

    private void btnGetStats_Click(object sender, EventArgs e)
    {
        int countStarts = 0;
        int countEnds = 0;

        IList<string> sessions = new List<string>();

        using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode))
        {
            while(!stRead.EndOfStream)
            {
                string line = stRead.ReadLine();
                if(line.Contains("Session start"))
                {
                    countStarts++;
                    sessions.Add(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
                }
                if (line.Contains("Session end"))
                {
                    countEnds++;
                    sessions.Remove(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
                }
            }
        }

        txtStarts.Text = countStarts.ToString();
        txtEnds.Text = countEnds.ToString();
        txtDifference.Text = (countStarts - countEnds).ToString();

        listBox1.DataSource = sessions;
    }
도움이 되었습니까?

해결책

FILESTREAM을 StreamReader에게 전달하고 적절한 Fileshare 값으로 Filestream을 만들 수 있습니다. 예를 들어:

using (var file = new FileStream (openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader (file, Encoding.Unicode)) {
}

다른 팁

컨텍스트를 추가 할 것이라고 생각했습니다 하지 않습니다 읽기를 위해 파일을 잠그십시오 글쓰기에만 휘파람이 읽히고 있습니다. StreamReader 클래스에서 아래 코드를 살펴보십시오.

 new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, FileOptions.SequentialScan);

MSDN에 대해 촬영 한 기본 FILEACCESS.READ PARAMETER에 주목하십시오 http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx

파일을 읽을 수있는 후속 개방을 허용합니다. 이 플래그가 지정되지 않은 경우 파일이 닫힐 때까지 읽기 파일을 엽니 다 (이 프로세스 또는 다른 프로세스에 따라)가 실패합니다. 그러나이 플래그가 지정 되더라도 파일에 액세스하기 위해 추가 권한이 여전히 필요할 수 있습니다.

읽기 및 쓰기를 허용하기 위해 MSDN에서 다시 가져 왔습니다.

읽기 또는 쓰기를 위해 파일을 후속으로 열 수 있습니다. 이 플래그가 지정되지 않은 경우 파일이 닫힐 때까지 (이 프로세스 또는 다른 프로세스에 따라) 읽기 또는 쓰기에 대한 파일을 엽니 다. 그러나이 플래그가 지정 되더라도 파일에 액세스하기 위해 추가 권한이 여전히 필요할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top