2012-04-21 2 views
0

현재 파일에 내용을 작성해야하는 C# 프로젝트에서 작업 중입니다. 파일이 쓰여지는 동안 별도의 스레드가 파일에 액세스하여 파일 크기를 얻으므로 가끔 파일을 쓰는 중일 때 파일 크기 검사에 파일이 잠기면 잠겨집니다.잠기지 않기 위해 파일에 쓰기 전에 버퍼에 쓰기

내가 생각한 것은 일종의 버퍼를 만드는 것이지만 Google에 맡길 때마다 로컬 스트림으로 적합하지 않은 네트워크 스트림이 다시 발생합니다. 그 계획이 파일에 직접 쓰는 쓰레드 대신에 어떤 종류의 버퍼에 쓰고, 별도의 쓰레드가 그 파일이 쓰기 가능한지 검사 한 다음 버퍼를 읽고 그 내용을 파일에 씁니다.

다른 문제는 매개 변수를 추가해야 파일에 쓸 때 내 프로그램이 여러 위치에서 입력을 수신 할 때 올바른 파일에 쓰게되므로이 값을 버퍼의 어딘가에 유지해야하지만 내가 본 스트림에서 오직 문자열 만 쓸 수 있습니다.

기본적인 질문은 어떻게하면 버퍼에 쓸 수 있고 버퍼에서 읽을 수 있으므로 파일에 쓸 수 있고 버퍼에 매개 변수를 유지하여 파일에 쓸 때 파일 에 쓸 수 있습니다.

도움을 주셔서 감사합니다.

+2

아마도 버퍼 대신 [잠금] (http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)이 필요합니다. –

+0

그리고 하나의 버퍼를 갖는 대신 출력 파일 당 하나의 버퍼를가집니다. –

답변

0

버퍼 공간과 파일 사양을 가진 클래스를 선언하십시오. 각 쓰기에 대해 하나씩 만들고 BackgroundWorker 쓰기 스레드에 대기열에 넣습니다. 스레드는 버퍼 인스턴스를 대기열에서 제외하고 임시 파일 잠금이 작동하는지 확인하기 위해 적절한 sleep() 루프 etry로 파일을 씁니다.

대기열에 대해 BlockingCollection을 사용할 수 있습니다.

0

파일의 길이를 가져 오면 파일을 잠그지 않아야합니다. 어떻게 그 일을하고 있니?

버퍼를 사용하면 길이 확인 작업으로 올바른 값이 더 이상 표시되지 않습니다.