C#FileStream.read偏移量和长度超出数组的界限,或者计数大于从索引到源集合结尾处的元素数量

weixin_41221178 2020-02-10 12:36:02
C#代码如下:
public void sendFile()
{
path = "C:/Users/PC/Desktop/SwiftMirror.exe";
FileStream fs = new FileStream(path, FileMode.Open);
long totalSize = fs.Length; //获取文件大小
int singleSize = 1024; //单次文件大小
int sendNumber = (int)totalSize / singleSize;//发送次数

byte[] bytes = new byte[singleSize];
for (int i = 0; i < sendNumber; i++)
{
fs.Read(bytes, i * singleSize, (i+1)*singleSize);
// client.Send(bytes);
}
if (totalSize - singleSize * sendNumber != 0)
{
byte[] overBytes = new byte[totalSize - singleSize * sendNumber];
fs.Read(bytes, singleSize * sendNumber, overBytes.Length);
// client.Send(bytes);
}
//将文件读到byte数组中
fs.Close();
}
异常:

...全文
2077 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿蒙Armon 2020-02-12
  • 打赏
  • 举报
回复
第二个参数和第三个参数,自己看一下
jimmy212 2020-02-11
  • 打赏
  • 举报
回复
不需要这样的,filestream的read函数本身会自动移动position的,直接写

            byte[] bytes = new byte[singleSize];
            int num = 0;
            for (int i = 0; i < sendNumber; i++)
            {

                num = fs.Read(bytes, 0, singleSize);
                //    client.Send(bytes);
                // 如果需要,这里可以判断num < singleSize说明没有那么多内容读取了
            }
引用 2 楼 杀马特丶蛮牛 的回复:
试下这样

            var path = @"C:\Users\woshi\Desktop\5.mht";
            FileStream fs = new FileStream(path, FileMode.Open);
            long totalSize = fs.Length;                             //获取文件大小
            int singleSize = 1024;                                     //单次文件大小
            int sendNumber = (int)totalSize / singleSize;//发送次数

            byte[] bytes = new byte[singleSize];
            int num = 0;
            for (int i = 0; i < sendNumber; i++)
            {
                num = i * singleSize + num;
                fs.Position = num;
                num = fs.Read(bytes, 0, singleSize);
                //    client.Send(bytes);
            }
            if (totalSize - singleSize * sendNumber != 0)
            {
                fs.Position = num;
                byte[] overBytes = new byte[totalSize - singleSize * sendNumber];
                fs.Read(bytes, 0, overBytes.Length);
                //     client.Send(bytes);
            }
            //将文件读到byte数组中
            fs.Close();
杀马特丶蛮牛 2020-02-10
  • 打赏
  • 举报
回复
试下这样

            var path = @"C:\Users\woshi\Desktop\5.mht";
            FileStream fs = new FileStream(path, FileMode.Open);
            long totalSize = fs.Length;                             //获取文件大小
            int singleSize = 1024;                                     //单次文件大小
            int sendNumber = (int)totalSize / singleSize;//发送次数

            byte[] bytes = new byte[singleSize];
            int num = 0;
            for (int i = 0; i < sendNumber; i++)
            {
                num = i * singleSize + num;
                fs.Position = num;
                num = fs.Read(bytes, 0, singleSize);
                //    client.Send(bytes);
            }
            if (totalSize - singleSize * sendNumber != 0)
            {
                fs.Position = num;
                byte[] overBytes = new byte[totalSize - singleSize * sendNumber];
                fs.Read(bytes, 0, overBytes.Length);
                //     client.Send(bytes);
            }
            //将文件读到byte数组中
            fs.Close();
github_36000833 2020-02-10
  • 打赏
  • 举报
回复
public void sendFile() { path = "C:/Users/PC/Desktop/SwiftMirror.exe"; using (FileStream fs = new FileStream(path, FileMode.Open)) { fs.CopyTo(new NetworkStream(client)); } }

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧