Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2016, 12:12   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,881
Вопрос Передача файла большого размера

Передают через Indy (TIdTCPClient/Server) файл размером 3 Гб и наблюдаю проблему с определением
Код:
ProgressBar1.Max
туда передаётся отрицательное значение (-408381440). При передаче файлов до 1 Гб, всё нормально.
Подскажите как исправить этот момент?
Shouldercannon на форуме Ответить с цитированием
Старый 19.02.2016, 12:24   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,436
По умолчанию

указывать в ProgressBar не байты а КБайты (или даже MБайты)
Код:
var
  fileSize: int64;
  filleSize:=3*1024*1024*1024;//ЗГбайта
ProgressBar1.Max =FileSize;
ProgressBar1.Max:=fileSize div 1024;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.02.2016, 12:38   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Показывайте расчет макс. прогресса,что вы туда передаёте?
Тип данных у ProgressBar1.Max какой? У Integer хватит места для пары петабайт в байтах.
Человек_Борща вне форума Ответить с цитированием
Старый 19.02.2016, 12:44   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,658
По умолчанию

Оставь ProgressBar.Min:= 0; ProgressBar.Max:= 100.
Вычисляй Position во время передачи:
Код:
X:= Round(100 * ПЕРЕДАНО_БАЙТ / РАЗМЕР_ФАЙЛА);
if X <> ProgressBar.Position
  then ProgressBar.Position:= X;
Цитата:
У Integer хватит места для пары петабайт в байтах.
Да ты гонишь! Где integer (-(2^31)...+(2^31 - 1)), а где петабайт (2 в 50-й степени)?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 19.02.2016 в 12:50.
min@y™ вне форума Ответить с цитированием
Старый 19.02.2016, 12:51   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,811
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
У Integer хватит места для пары петабайт в байтах.
На х86 МаксИнт = 2147483647
northener вне форума Ответить с цитированием
Старый 19.02.2016, 21:41   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Да ты гонишь! Где integer (-(2^31)...+(2^31 - 1)), а где петабайт (2 в 50-й степени)?
каюсь, переборщил
Человек_Борща вне форума Ответить с цитированием
Старый 22.02.2016, 17:50   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,881
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Показывайте расчет макс. прогресса,что вы туда передаёте?
Тип данных у ProgressBar1.Max какой? У Integer хватит места для пары петабайт в байтах.
Вот где проблема
Код:
procedure TForm1.MyServerProgress(var Msg: TMessage);
begin
  case Msg.WParam of
  0: begin
    SProgressBar.Max := Msg.LParam; // Фаталити
    SProgressBar.Position := 0;
  end;

  1: SProgressBar.Position := Msg.LParam;
  end;
end;
Msg.LParam не может вместить 3886585856
LPARAM = INT_PTR; - INT_PTR = System.IntPtr; - IntPtr = NativeInt - не помещается туда значение.

Как нарочно без MyServerProgress прогресс и передача файла в два раза медленнее и при передаче нужно отображать байты

Последний раз редактировалось Shouldercannon; 22.02.2016 в 17:55.
Shouldercannon на форуме Ответить с цитированием
Старый 22.02.2016, 17:59   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,501
По умолчанию

Дык 3 раза в разных темах уже сказали об этом и о том как надо делать.

Цитата:
Как нарочно без MyServerProgress прогресс и передача файла в два раза медленнее и при передаче нужно отображать байты
Непонятный набор слов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.02.2016, 18:05   #9
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,881
По умолчанию

Задача требует отображать количество переданных данных начиная с байт и заканчивая Мб, Гб и т.д. Здесь ProgressBar поднимешь, байты уронишь. Поднимешь байты, ProgressBar уронишь.
Замкнутый круг.

Последний раз редактировалось Shouldercannon; 22.02.2016 в 18:07.
Shouldercannon на форуме Ответить с цитированием
Старый 22.02.2016, 18:09   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,501
По умолчанию

Причем тут отображение байтов и полоса прогресса в ProgressBar? Это разные вещи.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файлов большого размера через сайт. shavedcat HTML и CSS 15 14.05.2015 06:55
Загрузка файла большого размера с одного устройства monolitsk PHP 9 20.02.2014 11:23
Определение размера файлов большого размера stpdqstns Общие вопросы C/C++ 4 13.03.2013 11:50
Скачать файл большого размера Volkogriz Общие вопросы Delphi 4 21.02.2013 09:43
вывод буквы большого размера masterbet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 30.11.2011 23:57