0

Воощем ребят смотрите, есть код: 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. В интернете кучу примеров просмотрел, но люди везде по-разному реализуют. Поэтому и не пришел к единому правильному выводу.

Malcolm
  • 65
  • 1
    нет никакой разницы. С точки зрений логики, может быть, логичнее 2й вариант: сначала записать данные, потом обновить позицию, и потом об этом отчитаться. Но по сути разницы 0 – iikuzmychov Feb 23 '23 at 19:58
  • А с чего этот вопрос вообще возник? https://ru.stackoverflow.com/a/1134235/373567 – aepot Feb 23 '23 at 21:30
  • Вариант 2. Потенциально проблема может возникнуть в строке, где запись идёт, и "рапортовать" следует когда запись прошла успешно. ПС: currentPosition случайно не дублирует функционал Stream.Position? – Qwer Feb 24 '23 at 03:09
  • @Qwer - нет, это просто название переменной. – Malcolm Feb 24 '23 at 11:32
  • @Qwer - И да кстати, Вы правы, если что-то пойдет не так при записи и возникнет исключение. А мы при этом уже отрапортовали пользователю на этом этапе, о том, что этот этап прошли. Тогда да, получается нужно использовать 2 вариант. Вы кстати можете написать ответ, а я его помечу как верный. – Malcolm Feb 24 '23 at 11:41

1 Answers1

1

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

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

Qwer
  • 463