@SHentai

StreamReader, как изменить позицию?

Здравствуйте.
Нужно изменить позицию в потоке, сразу например на 100'ый байт, но не могу найти примеры где вообще кто-то менял позицыю, написано что BaseStream.Position можно как читать, так и устанавливать своё значение, но при установке у меня ошибки:
System.InvalidOperationException: You cannot modify the position of a FtpDataStream. This property is updated as data is read or written to the stream.
   at FluentFTP.FtpDataStream.set_Position(Int64 value)

var client = await FTPConnect(userData);
                using (StreamReader sr = new StreamReader(await client.OpenReadAsync(path), Encoding.UTF8))
                {
                    try
                    {
                        sr.BaseStream.Position = Convert.ToInt64(offset); // Convert.ToInt64, поскольку нужно long
                        // for (int i = 0; i != offset; i++) sr.Read(); // Сделал с циклом, но не думаю что это хорошо
                        Console.WriteLine("#" + sr.BaseStream.Position + "\n" + sr.ReadToEnd() + "\n#"+sr.BaseStream.Position); 
                    }
                    finally
                    {
                        sr.Close();
                    }
                }


Буду благодарен за любую помощь!
  • Вопрос задан
  • 613 просмотров
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Позицию начала скачивания нужно указывать в свойстве "ContentOffset" объекта "FtpWebRequest":
https://msdn.microsoft.com/en-us/library/system.ne...

Поток (Stream) трогать не нужно. Там уже будут данные с нужной нам позиции.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@cicatrix
было бы большой ошибкой думать
Сетевые потоки операцию SEEK не поддерживают. Читай всё подряд в массив, а уже там выбирай нужное.
Такое может прокатить только с File/MemoryStream

Прежде чем устанавливать позицию, проверяй свойство Stream.CanSeek
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы