2017-09-13 1 views
1

동일한 파일에서 작동하는 2 개의 FileStream 객체가있는 프로세스가 있습니다.동일한 파일에 여러 개의 FileStream이 있으면 쓰기가 무시됩니다.

file = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

가 그럼 난 다른 하나는 무시되는 동안 그들에게 몇 바이트를 모두 사용하여 쓰기 방법, 마지막이라고 쓰기가 최선을 다하고 쓰기 : 두 개체가 동일한 방법을 사용하여 파일을 엽니 다. 다음 코드를 사용하여 호출되는 쓰기 :

fh.file.Write(buffer, 0, count);

buf 것은 모두 통화에서 "fd"count 동일 것은 내가 그 이후 두 객체에 대한 close() 전화 2

과 같다. 프로그램이 종료 된 후, 출력 파일은 두 개의 "fd"중 하나만 가지고 있어야한다. 왜 그런 일이 일어나는거야? 두 개체 모두에 Flush()을 호출 해 보았지만 차이는 없습니다.

참고 : Write()에 대한 호출은 동일한 스레드에 의해 수행됩니다. 최종 실행 순서는 다음과 같이이다 : 그것은 간단한 문제처럼 보인다

open_obj1() 
open_obj2() 
write_obj1("fd") 
write_obj2("fd") 
close_obj1() 
close_obj2() 

하지만 문제는 여기서 내가 얻을 수 없습니다. 두 FileStreams가 같은 위치에서 파일 포인터를 읽은 다음 파일 끝까지 탐색하기 때문에 같은 위치에 쓰려고합니까? 그렇다면 정확하게 같은 실행 명령을 원한다면 어떻게해야할까요?

+0

왜 같은 파일에 2 개의 파일 스트림이 필요합니까? – Michael

+0

'두 FileStream이 같은 위치에서 파일 포인터를 읽은 다음 둘 다 파일 끝까지 탐색하기 때문에 같은 위치에 쓰려고합니까? '예 –

+0

@Michael 일종의 테스트 케이스예요. – mohRamadan

답변

1

Stream.Position; 이 속성은 두 스트림간에 공유되지 않으므로 이후 쓰기가 처음부터 시작되므로 이전 입력 내용을 덮어 씁니다. 텍스트 입력을 전환하여 덮어 쓰거나 캐럿을 이동하거나 새 텍스트를 입력하는 것과 다릅니다. 유사하게, 더 긴 문자열 다음에 더 짧은 문자열을 쓰려면 긴 문자열의 남은 텍스트를 관찰해야합니다.

관련 문제