如何在不使用循环的情况下读取文件流?当我使用这段代码时,它只读取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();
}
答案 0 :(得分:2)
如果你想在一次中阅读整个文件,我建议使用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
答案 1 :(得分:0)
假设您的文件包含文本,那么您可以使用流阅读器并将FileStream传递给构造函数(下面我创建一个新的FileStream来打开文件):
using(StreamReader reader = new StreamReader(new FileStream("path", FileMode.Open)))
{
string data = reader.ReadToEnd();
}
答案 2 :(得分:0)
来自redemption
上的documentation:
返回值
输入:System.Int32
读入缓冲区的总字节数。如果当前没有多个字节可用,则这可能小于请求的字节数,如果已到达流的末尾,则可以小于零(0)。
因此,如果Stream.Read
读取的内容比缓冲区长度短,那么它似乎完全合法,前提是它告诉您它的作用。