Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FileStream.Read - Read a stream without using a loop

Tags:

c#

filestream

How would I read a filestream without using a loop? When I use this code it only reads 5714 bytes instead of 1048576 bytes

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

If I use this loop it works fine

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

So how would I read an entire stream without using a loop? Thanks, would appreciate any help. I have to read all of the data into a buffer and then write it. Sorry I didn't mention this earlier.

EDIT: You can use this code as well to read a stream into a buffer at once:

using (var streamreader = new MemoryStream())
            {
                stream.CopyTo(streamreader);
                buffer = streamreader.ToArray();
            }
like image 691
Dinindu Perera Avatar asked May 10 '26 16:05

Dinindu Perera


1 Answers

If you want to read the entire file in one go, I suggest using File.ReadAllBytes for binary files:

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

And File.ReadAllText / File.ReadAllLines for text ones:

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

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

Edit: in case of web

  byte[] data;

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

    data = wc.DownloadData(myUrl); 
  }

when myUrl is @"https://www.google.com" I've got data.Length == 45846

like image 172
Dmitry Bychenko Avatar answered May 12 '26 07:05

Dmitry Bychenko