文件流.Read -不使用循环读取流
本文关键字:循环 读取 Read 文件 | 更新日期: 2023-09-27 18:02:21
如何在不使用循环的情况下读取文件流?当我使用这段代码时,它只读取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
}
那么我如何在不使用循环的情况下读取整个流呢?谢谢,非常感谢任何帮助。我必须把所有的数据读入缓冲区,然后再写入。对不起,我没有早点告诉你。
EDIT:您也可以使用这段代码一次将流读入缓冲区:
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");
编辑:如果是web
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
的文档:
返回值类型:系统。Int32
读取到缓冲区的总字节数。如果当前没有那么多字节可用,此值可以小于请求的字节数,如果已到达流的末端,则为零(0)。
所以看起来Stream.Read
读取小于缓冲区长度是完全合法的,只要它告诉你它是这样做的。