繁体   English   中英

FileStream.Read - 不使用循环读取流

[英]FileStream.Read - Read a stream without using a loop

如何在不使用循环的情况下读取文件流? 当我使用这个代码时,它只读取5714个字节而不是1048576个字节

byte[] Buffer = new byte[1048576];
ByteSize = downloadstream.Read(Buffer, 0,Buffer.Lenght);

如果我使用这个循环它工作正常

while ((ByteSize = downloadstream.Read(Buffer, 0, Buffer.Length)) > 0)
{
    //write stream to file
}

那么如何在不使用循环的情况下读取整个流? 谢谢,非常感谢任何帮助。 我必须将所有数据读入缓冲区然后写入。 对不起,我之前没有提到过。

编辑:您也可以使用此代码一次将流读入缓冲区:

using (var streamreader = new MemoryStream())
            {
                stream.CopyTo(streamreader);
                buffer = streamreader.ToArray();
            }

如果你想阅读整个文件中一气呵成 ,我建议使用File.ReadAllBytes二进制文件:

 byte[] data = File.ReadAllBytes(@"C:\MyFile.dat");

文件的File.ReadAllText / File.ReadAllLines

 string text = File.ReadAllText(@"C:\MyFile.txt");

 string[] lines = File.ReadAllText(@"C:\MyOtherFile.txt");

编辑 :万一网络

  byte[] data;

  using (WebClient wc = new WebClient()) {
    wc.UseDefaultCredentials = true; // if you have a proxy etc.

    data = wc.DownloadData(myUrl); 
  }

myUrl@"https://www.google.com"我有数据data.Length == 45846

假设您的文件包含文本,那么您可以使用流阅读器并将FileStream传递给构造函数(下面我创建一个新的FileStream来打开文件):

using(StreamReader reader = new StreamReader(new FileStream("path", FileMode.Open)))
        {
            string data = reader.ReadToEnd();
        }

Stream.Read上的文档

回报价值

键入:System.Int32

读入缓冲区的总字节数。 如果当前没有多个字节可用,则这可能小于请求的字节数,如果已到达流的末尾,则可以小于零(0)。

所以看起来Stream.Read读取的缓冲区长度是完全合法的,前提是它告诉你它的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM