流读取总是返回0

3
我们正在使用ASP.NET的Asyncfileupload控件来上传文件,但是我们已经进行了调试并发现以下代码存在问题:
input.Read(buffer, 0, buffer.Length)

返回0。

整段代码如下:

public static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[input.Length];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }

你的代码看起来没问题。尝试调试一下,看看 input.Length,我猜它也是零吧? - SWiggels
你正在使用UpdatePanels吗?试着不用它,AsyncFileUpload在UpdatePanels中会出现问题。我猜测当你回传时,你的文件上传控件是空的,请尝试这个:如果AsyncFileUpload1.HasFile Then... - Iztoksson
1个回答

5

如果你已经读取到了字节数组的末尾或者网络连接断开,Stream.Read可能会返回0。你可以尝试使用以下代码来确保:

byte[] buffer = new byte[input.Length];
input.Position=0;
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接