我想把一个文件切成一小块一小块的数据包,发出去.
以下是代码:
long ll_count;
byte[] buff =new byte[1000];
long nread;
int ll_Pos=0;
ll_count = lFilelen / 1000;
for (int i = 1; i <= ll_count; i++)
{
nread=FileFS.Read(buff,ll_Pos,1000);
SendData(buff);
ll_Pos=ll_Pos + 1000;
}
FileFS.Close();
第一次可以取得前1000个字节,第二次就报错了:
未处理的“System.ArgumentException”类型的异常出现在 mscorlib.dll 中。
其他信息: 偏移和长度已超出数组界限,或者计数大于从索引到源集合末尾的元素数。
怎么写才正确?
正确的写法:
FileStream fsIn = new FileStream(fileName, FileMode.Open, FileAccess.Read);
string basePath = System.IO.Path.GetDirectoryName(fileName);
int fileSize = (int) fsIn.Length;
int segments = (int) (fileSize / m_segmentSize);
int remainder = (int) (fileSize % m_segmentSize);
if (remainder > 0) segments++;
byte[] buffer = new byte[m_blockSize];
int bytesRead = 0;
try
{
for (int i = 0; i < segments; i++)
{
FileStream fsOut = new FileStream(fileName + "." + i, FileMode.Create,FileAccess.Write);
int blocks = (int) (m_segmentSize / m_blockSize);
for ( int j = 0; j < blocks ; j++)
{
bytesRead = fsIn.Read(buffer, 0, m_blockSize);
fsOut.Write(buffer, 0, bytesRead);
}
fsOut.Close();
OnProgessNotify ( Utilities.GetPercentComplete( i+1 , segments ) );
}
return (int) segments;
}
finally
{
OnProgessNotify( 100 );
if ( fsIn != null ) fsIn.Close();
}