Russian Qt Forum
Ноябрь 23, 2024, 22:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка файлов 2гб и больше  (Прочитано 4774 раз)
Zusykss
Гость
« : Август 08, 2017, 21:32 »

Слушайте загружаю файл 2гб из сайта на комп, пример ссылки
http://shareae.com/after-effects-presets/10190-red-giant-complete-suite-2017-for-adobe-cs5-cc-2017-for-win.html

Когда программа доходит до скачивания 1,8 гб, вылетает ошибка и программа завершается, хотя памяти на компе задействовано 57%
В чем может быть причина.
Файлы меньше 1 гига, по 200мб, 50, 60 , качаются без проблем В замешательстве
И еще вопрос, правильно я сохраняю большие файлы,
Код:
if(archive.open(QIODevice::WriteOnly))
            {
                archive.write(m_Buffer);
                archive.close();
            }
Если нет киньте пример у кого есть
За ранее Благодарю!
« Последнее редактирование: Август 08, 2017, 21:37 от Zusykss » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Август 08, 2017, 23:34 »

В чем может быть причина.

очевидно нужно включить отладчик, да посмотреть
Записан
Zusykss
Гость
« Ответ #2 : Август 09, 2017, 06:39 »

В чем может быть причина.

очевидно нужно включить отладчик, да посмотреть


А что, там смотреть ?
Я запускаю программу она качает файлы записывает их на диск, если попадает файл больше 2 гигов, она его качает доходит до 1820мб , я по памяти смотрел в TaskMAnager, и вылететает.
Есть возможность сразу писать в поток?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Август 09, 2017, 09:29 »

А что, там смотреть ?
Я запускаю программу она качает файлы записывает их на диск, если попадает файл больше 2 гигов, она его качает доходит до 1820мб , я по памяти смотрел в TaskMAnager, и вылететает.
Есть возможность сразу писать в поток?

очевидно, что отладчик остановится в месте сбоя и покажет где и что, а не просто "программа вылетает"
 
что такое "сразу писать в поток" ?
Записан
Zusykss
Гость
« Ответ #4 : Август 09, 2017, 10:08 »



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

[/quote]
Я сейчас тестирую вариант, через сигнал
QObject::connect(m_reply, &QNetworkReply::readyRead, this, &LoaderVideo::ReplyFinished);
QDataStream fout(file);
fout << m_reply->readAll();

Я считываю частями, и записываю.

Возможно это как раз то, что мне нужно.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #5 : Август 09, 2017, 10:10 »

Причина в том, что ОС не может выделить больше оперативной памяти для приложения 32 bit разрядности.
Не пытайтесь закачать файл в оперативную память целиком. При скачивании части, которые уже записали в файл необходимо удалять из оперативной памяти.
Закачали часть -> дописали в конец файла -> удалили закачанную часть.

То есть должно быть что-то вроде

Код
C++ (Qt)
if ( archive.open( QIODevice::WriteOnly | QIODevice::Append ) )
{
   archive.write( packet );
   archive.close();
}
 
Записан
Zusykss
Гость
« Ответ #6 : Август 09, 2017, 11:12 »

Причина в том, что ОС не может выделить больше оперативной памяти для приложения 32 bit разрядности.
Не пытайтесь закачать файл в оперативную память целиком. При скачивании части, которые уже записали в файл необходимо удалять из оперативной памяти.
Закачали часть -> дописали в конец файла -> удалили закачанную часть.

То есть должно быть что-то вроде

Код
C++ (Qt)
if ( archive.open( QIODevice::WriteOnly | QIODevice::Append ) )
{
   archive.write( packet );
   archive.close();
}
 

Благодарю за ответ, так и делаю...
Записан
Zusykss
Гость
« Ответ #7 : Август 09, 2017, 12:12 »

Благодарю всех за ответы. Решение найдено.

 Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.094 секунд. Запросов: 23.