저는 FPGA 프로젝트를위한 C# 직렬 인터페이스를 작성 중이며 현재 작업하고 있습니다. 문제가 발생했습니다. 나는 그러나 파일을 읽는 오류를 얻고 있지만 내가 디버그 동안한 번에 16 바이트 파일을 읽는 중
.. 16 바이트를 전송하고 올바른 수신시 다음 16 바이트 등을 보내, 한 번에 파일 16 바이트를 읽을 필요가 :
* 오프셋 및 길이가 배열의 범위를 벗어나거나 개수가 인덱스에서 소스 모음 끝까지의 요소 수보다 큽니다.
파일 크기가 약 1200 바이트이고 두 번째 파일에서 오류가 발생했습니다. 프로그램이 16 바이트 (즉, 파일의 16-31 바이트)를 읽으려고 할 때.
어떤 아이디어? 이 작업을 수행하는 데 잘못된 방법을 사용한 오프셋을 사용하고 있습니까? 당신이 대상 배열의 오프셋 (offset) 것으로 간주됩니다) 많은
감사합니다, 마이클
///////////////////// Get file data ///////////////////
else if (fileDataSent == false)
{
FileStream fs = File.OpenRead(tbFileToSend.Text);
try
{
byte[] readBytes = new byte[16];
fs.Read(readBytes, nextReadOffset, 16);
fs.Close();
for (int j = 0; j < 16; j++)
{
sendData[j + 3] = readBytes[j];
}
}
finally
{
fs.Close();
}
nextReadOffset = nextReadOffset + 16;
dataBytesSent = dataBytesSent + 16;
sendData[0] = Convert.ToByte("10000001", 2);
sendData[1] = ByteID;
sendData[2] = Convert.ToByte("11000011", 2);
sendData[19] = Convert.ToByte("11100111", 2);
ByteID++;
if (dataBytesSent == WriteFileSize)
{
fileDataSent = true;
}
}
고마워, 많은 감사. 즉, 스트림을 열 때마다 : (FileStream fs = File.OpenRead (tbFileToSend.Text);) 파일 포인터의 기본값은 0이됩니까? 또한 bytes가 <16 인 EOF 상황에서 읽을 수있는 데이터가없는 경우 readBytes []가 0으로 채워지겠습니까? 아니면 어떤 종류의 오류가 발생합니까? – TheEngineerer
@ MichaelAlllen771 [문서] (http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx)에 따르면'Read'는 실제로 읽혀진 바이트 수를 반환합니다. 대상 배열로), 더 많은 경우에 대비하여 요청 된 바이트 수보다 적을 수 있습니다. 주의 사항 절을 참조하십시오. – GSerg