Filestream правильный порядок кода при записи?

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023

Воощем ребят смотрите, есть код: 1

...
byte[] buffer = new byte[1024];
int currentPosition = 0;
int byteReceieved;

while ((byteReceieved = srcStream.Read(buffer, 0, buffer.Length)) > 0)
{
  currentPosition += byteReceieved;//1
  TotalProgress.Value = ... //2
  dstStream.Write(buffer, 0, byteReceieved);  
}

И такой: 2

...
byte[] buffer = new byte[1024];
int currentPosition = 0;
int byteReceieved;

while ((byteReceieved = srcStream.Read(buffer, 0, buffer.Length)) > 0)
{    
  dstStream.Write(buffer, 0, byteReceieved);
  currentPosition += byteReceieved;//1 
  TotalProgress.Value = ... //2
}

И вот такой: 3

...
byte[] buffer = new byte[1024];
int currentPosition = 0;
int byteReceieved;

while ((byteReceieved = srcStream.Read(buffer, 0, buffer.Length)) > 0)
{   
  currentPosition += byteReceieved; //1
  dstStream.Write(buffer, 0, byteReceieved);   
  TotalProgress.Value = ... //2
}

Суть вопроса: какой из этих примеров верный, 1 - когда мы рапортуем и считаем до записи в файл, 2 - после записи в файл, и 3 - считаем до, рапортуем после?. И есть ли тут разница вообще? P.S. В интернете кучу примеров просмотрел, но люди везде по-разному реализуют. Поэтому и не пришел к единому правильному выводу.

Ответы

▲ 1Принят

Вариант 2. Потенциально проблема может возникнуть в строке, где запись идёт, и "рапортовать" следует когда запись прошла успешно.

ПС: currentPosition случайно не дублирует функционал Stream.Position?