我首先创建一个FileStream
来打开文件,读入缓冲区,然后调用NetworkStream.write()
来编写其内容,而不是一次读取所有内容。
这是代码。
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
try
{
int len = (int)fs.Length;
byte[] data = new byte[len];
byte[] buffer = new byte[bufferSize];
int count, sum = 0;
while ((count = fs.Read(buffer, sum, len - sum)) > 0)
{
netstream.Write(buffer,sum,len-sum);
sum += count;
}
...
它抛出了错误:
未处理的类型' System.ArgumentException'发生在 mscorlib.dll中
其他信息:
偏移和长度超出数组范围或计数更大 比从索引到源头的元素数量 集合。
我在这里看不到任何阵列出界问题。
建议
答案 0 :(得分:4)
Offset和Length应该基于缓冲区长度而不是整个文件,这里是一个从FileStream
读取chucked数据并将其写入另一个流的示例:
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[bufferSize];
while (true)
{
var count = fs.Read(buffer, 0, buffer.Length);
if (count == 0) break;
netstream.Write(buffer, 0, count);
}
}