Работаем с потоками (c#, .net)

  1. Прочитаем все сразу из потока
    string content;
    using(StreamReader reader = new StreamReader(stream))
    {
        content = reader.ReadToEnd();
    }
    
  2. Прочитаем построчно из потока
    List<string> content = new List<string>();
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
            content.Add(reader.ReadLine());
    }
    // или
    content.Clear();
    using (StreamReader reader = new StreamReader(stream))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
            content.Add(line);
    }
    
  3. Прочитаем байты по частям из потока
    byte[] ba;
    using (StreamReader reader = new StreamReader(stream))
    {
        List<byte> bl = new List<byte>();
        byte[] buffer = new byte[2048];
        int count;
        while ((count = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
            bl.AddRange(count == buffer.Length ? buffer : buffer.Take(count));
        ba = bl.ToArray();
    }
    // или
    using (StreamReader reader = new StreamReader(stream))
    using (MemoryStream ms = new MemoryStream())
    {
        byte[] buffer = new byte[2048];
        int count;
        while ((count = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
            ms.Write(buffer, 0, count);
        ba = ms.ToArray();
    }
    
  4. Прочитаем определенное количество байт по смещению
    int size = 2048;
    int offset = 128;
    byte[] ba = new byte[size];
    using (StreamReader reader = new StreamReader(stream))
    {
        reader.BaseStream.Seek(offset, SeekOrigin.Begin);
        reader.BaseStream.Read(ba, 0, size);
    }
    
  5. Запишем байты из одного потока в другой
    using (StreamReader reader = new StreamReader(stream))
    using (MemoryStream ms = new MemoryStream())
    {
     reader.BaseStream.CopyTo(ms);
     // do stuff with ms
    }
    
  6. Запишем байты из одного потоков в другой по частям
    using (StreamReader reader = new StreamReader(stream))
    using (MemoryStream ms = new MemoryStream())
    {
        byte[] buffer = new byte[2048];
        int count;
        while ((count = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
            ms.Write(buffer, 0, count);
        // do stuff with ms
    }
    
    
  7. Получаем поток из запроса
    WebRequest request = WebRequest.Create(url);
    using (WebResponse response = request.GetResponse())
    using (Stream stream = response.GetResponseStream())
    {
        // do stuff
    }
    
  8. Получаем поток из ftp запроса
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
     request.Method = WebRequestMethods.Ftp.DownloadFile;
     request.Credentials = new NetworkCredential(login, password);
     using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
     using (Stream stream = response.GetResponseStream())
     {
        // do stuff
    }
    
  9. Получим строку из байтов
    string content = Encoding.UTF8.GetString(ba);
    
  10. Получим массив байтов из строки
    byte[] ba = Encoding.UTF8.GetBytes(content)
    
  11. Преобразуем в другую кодировку
    ba = Encoding.Convert(Encoding.GetEncoding("windows-1251"), UTF8Encoding.UTF8, ba);
    string content = Encoding.UTF8.GetString(ba);