아래 코드가 입력 파일에 동일한 출력 파일을 생성하지 않는 이유는 무엇입니까?FileStream 클래스를 사용하여 파일을 복사 할 때 출력이 입력과 일치하지 않는 이유는 무엇입니까?
아이디어는 파일의 일부를 버퍼링하고 작은 버퍼에서 씁니다 (이것은 파일을 스트리밍하는 큰 프로젝트에서 오류를 재현하는 작은 프로그램입니다). 16 진수 편집기 비교 도구에서 이러한 파일을 검사하면 출력 파일이 다소 다릅니다.
fsIn = new FileStream("c:\\wmvs\\Wildlife.wmv", FileMode.Open, FileAccess.Read);
fsOut = new FileStream("c:\\Users\\public\\documents\\compare\\out.wmv", FileMode.Create, FileAccess.Write);
bData = new byte[fsIn.Length/10];
bOut = new byte[524288];
fsIn.Read(bData, 0, bData.Length);
bool bGo = true;
while (bGo)
{
if (nWrittenOut == bData.Length)
{
fsIn.Read(bData, 0, bData.Length);
}
if (nWrittenOut + bOut.Length >= bData.Length)
{
Array.Clear(bOut, 0, bOut.Length);
int nWhatsLeft = bData.Length - nWrittenOut;
Array.Copy(bData, nWrittenOut, bOut, 0, nWhatsLeft);
fsIn.Read(bData, 0, bData.Length);
nWrittenOut = 0;
int nBufPos = nWhatsLeft;
nWhatsLeft = bOut.Length - nWhatsLeft;
Array.Copy(bData, nWrittenOut, bOut, nBufPos, nWhatsLeft);
nWrittenOut += bOut.Length;
}
else
{
Array.Copy(bData, nWrittenOut, bOut, 0, bOut.Length);
nWrittenOut += bOut.Length;
}
fsOut.Write(bOut, 0, bOut.Length);
fsOut.Flush();
if (fsOut.Position >= fsIn.Length)
bGo = false;
}
}
나는 아래의 모든 대답을 시도했지만 아무런 효과가 없습니다. 그것은 코드에서 내 논리가 있어야합니다. 그러나 나는 문제를 볼 수 없다 ???? 그것은 출력 파일 bouut의 길이에 eqivalent 전체 덩어리 실종 보인다.
파일 복사가 가능한 경우 사용할 수있는 복사 메커니즘을 사용합니다. File.Copy가 있다고 생각합니다. 스트림을 읽고 다른 스트림을 작성하려면 당신이 여기에있는 많은 코드에 대해 당혹 스럽습니다. –
좀 더 자세한 설명이 담긴 제목은 아마도 더 많은 답변을 얻을 것입니다. – Nacho
데이터가 꺼져있는 방법을 설명하면 도움이됩니다. 새 라인이 변경 되었습니까? 파일에 0 문자가 기록 되었습니까? 등등. 구체적이어야하고, 당신의 질문 제목에 관해서는 대단히 나쁘다. 이것은 개인 포럼이 아닙니다. –