0

我不是一次读取所有内容,而是首先创建一个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;  
        }
...

它抛出错误:

mscorlib.dll 中出现“System.ArgumentException”类型的未处理异常

附加信息:

数组的偏移量和长度超出范围或计数大于从索引到源集合末尾的元素数。

我在这里没有看到任何数组越界问题。

请提出建议

4

1 回答 1

4

偏移量和长度应该基于缓冲区长度而不是整个文件,这是一个从 a 读取卡盘数据FileStream并将其写入另一个流的示例:

        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);
                }
        }
于 2014-12-27T08:24:13.627 回答