使用FileStream的System.ArgumentException

时间:2014-12-27 08:08:14

标签: c# winforms sockets client-server system.io.file

我首先创建一个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中

其他信息:

  

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

我在这里看不到任何阵列出界问题。

建议

1 个答案:

答案 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);
                }
        }
相关问题