Поток – длина контентаC#

Место общения программистов C#
Ответить
Anonymous
 Поток – длина контента

Сообщение Anonymous »

Нет ли способа узнать длину содержимого, которое в данный момент содержится в потоке?

Я думал, что длина даст мне то, что я ищу, но в моем тесте она не совпала.

Код: Выделить всё

public class Solution {

public static void Main(string[] args)
{
var raw = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5 };
using (var stream = new MemoryStream(3)) {
long size = stream.Length;              // Actual 0, expected 0
long capacity = stream.Capacity;        // Actual 3, expected 3
long position = stream.Position;        // Actual 0, expected 0

stream.Write(raw, 0, raw.Length);
size = stream.Length;                   // Actual 6, expected 6
capacity = stream.Capacity;             // Actual 256, expected big enough to hold content
position = stream.Position;             // Actual 6, expected 6

var buffer = new byte[1];
stream.Read(buffer, 0, 1);
size = stream.Length;                   // Actual 6, expected 5
capacity = stream.Capacity;             // Actual 256, expected same as before
position = stream.Position;             // Actual 6, expected 5

stream.Write(raw, 0, raw.Length);
size = stream.Length;                   // Actual 12, expected 11
capacity = stream.Capacity;             // Actual 256, expected same as before
position = stream.Position;             // Actual 12, expected 11

stream.Seek(0, 0);
size = stream.Length;                   // Actual 12, expected 11
position = stream.Position;             // Actual 0, expected 0
}
}
}
Я ожидаю, что чтение уменьшит размер на 1. Судя по всему, это не так. Тогда возникает вопрос: если байт сохраняется в памяти, а длина сообщается, включая прочитанные байты, когда он удаляется из памяти? (Мы не можем накапливать вечно!) и как нам получить длину текущего контента? (общее количество записанных байт - общее количество прочитанных байт)?

Изменить:
Я понял, что позиция остается в конце потока при первой записи, если вы не выполняете поиск назад. Позиция является общей для чтения и записи. Однако остальные вопросы остаются.

Подробнее здесь: https://stackoverflow.com/questions/524 ... of-content
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»