2013-02-16 4 views
1
BinaryWriter bw; 
while(bw.BaseStream.Position < 192137) 
bw.Write((byte) 0); 

결국 bw.BaseStream.Position은 192152 (192137이 아님)와 같습니다. 그리고 파일 크기는 192 104 바이트입니다. 이것이 어떻게 가능한지?BinaryWriter.BaseStream.Position wrong?

+0

스트림이 추가로 열렸습니까? 당신이 글쓰기를 시작하기 전에'Position'을 확인 했습니까? 스트림을 닫았 니? –

+0

스트림은 File.Create()로 만들어지며 Position은 192137보다 작습니다. 그것은 실제로 마지막에 닫힙니다. – user2078570

답변

1

BinaryWriter는 데이터를 기본 스트림에 쓰 기 전에 버퍼링합니다. ,를 사용하여 스트림 또는 BinaryWriter : 엄지 손가락의

for (int i = 0; i < 192137; i++) 
{ 
    bw.Write((byte) 0); 
} 

규칙 :

당신은, 192,137 바이트를 쓰기 대신 192,137 바이트가 기본 스트림에 기록 될 때까지 기다리는 BinaryWriter에 192,137 바이트를 작성하려는 경우 둘 다 사용하지 마십시오. (즉, BinaryWriter를 사용하는 경우 BaseStream에 액세스하지 마십시오.)

+0

하지만 192137 바이트를 쓰고 싶지 않습니다. 나머지는 192137 바이트가 될 때까지 0으로 채우고 싶습니다. – user2078570

+0

그러면 BinaryWriter를 사용하여 이미 작성한 바이트 수의 공격을 유지해야합니다. 또는 BinaryWriter를 사용하지 마십시오. – dtb

+1

그런 다음'Flush()'를하고, 위치를 확인하고, 나머지 바이트를 계산하고, 그 양을 루프에 씁니다. 매 바이트마다 위치를 확인하지 마십시오. – CodesInChaos